【问题标题】:Is it possible to specify proxy credentials in your web.config?是否可以在您的 web.config 中指定代理凭据?
【发布时间】:2010-09-16 06:04:48
【问题描述】:

我需要配置一个网站以通过代理访问另一台机器上的网络服务。我可以将网站配置为使用代理,但我找不到指定代理所需凭据的方法,这可能吗?这是我目前的配置:

<defaultProxy useDefaultCredentials="false">
    <proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>

我知道你可以通过代码做到这一点,但网站运行的软件是闭源 CMS,所以我不能这样做。

有没有办法做到这一点? MSDN 对我帮助不大..

【问题讨论】:

    标签: c# web-services proxy


    【解决方案1】:

    您可以通过在 Windows 凭据管理器中添加代理服务器的新通用凭据来指定凭据:

    1 在 Web.config 中

    <system.net>    
    <defaultProxy enabled="true" useDefaultCredentials="true">      
    <proxy usesystemdefault="True" />      
    </defaultProxy>    
    </system.net>
    
    1. 在控制面板\所有控制面板项\凭据管理器中 >> 添加通用凭据

    Internet 或网络地址:您的代理地址
    用户名:您的用户名
    密码:你通过

    此配置对我有用,无需更改代码。

    【讨论】:

    • 控制面板\所有控制面板项\凭据管理器
    • 在 Microsoft ISA 代理后面为我工作
    【解决方案2】:

    是的,可以在不修改当前代码的情况下指定您自己的凭据。不过,它需要您编写一小段代码。

    使用这个类创建一个名为 SomeAssembly.dll 的程序集:

    namespace SomeNameSpace
    {
        public class MyProxy : IWebProxy
        {
            public ICredentials Credentials
            {
                get { return new NetworkCredential("user", "password"); }
                //or get { return new NetworkCredential("user", "password","domain"); }
                set { }
            }
    
            public Uri GetProxy(Uri destination)
            {
                return new Uri("http://my.proxy:8080");
            }
    
            public bool IsBypassed(Uri host)
            {
                return false;
            }
        }
    }
    

    将此添加到您的配置文件中:

    <defaultProxy enabled="true" useDefaultCredentials="false">
      <module type = "SomeNameSpace.MyProxy, SomeAssembly" />
    </defaultProxy>
    

    这会在列表中“注入”一个新代理,并且由于没有默认凭据,WebRequest 类将首先调用您的代码并请求您自己的凭据。您需要将 assemble SomeAssembly 放在 CMS 应用程序的 bin 目录中。

    这是一个静态代码,要获取所有字符串,如用户、密码和 URL,您可能需要实现自己的 ConfigurationSection,或者在 AppSettings 中添加一些信息,这更容易.

    【讨论】:

    • 我将把它标记为答案,因为它看起来应该可以工作,但我仍然遇到连接问题,这似乎取决于 ISA服务器比什么都重要..
    • 我们不应该做 +1 等,但这是一个非常简单而优雅的解决方案!
    • 知道如何将凭据传递给程序集吗?我不想硬编码这些信息,因为用户以后应该能够在不重新编译代码的情况下更改这些信息。
    【解决方案3】:

    虽然我没有找到在 web.config 中指定代理网络凭据的好方法,但您可能会发现您仍然可以使用非编码解决方案,方法是将其包含在您的 web.config 中:

      <system.net>
        <defaultProxy useDefaultCredentials="true">
          <proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
        </defaultProxy>
      </system.net>
    

    实现这一目标的关键因素是更改 IIS 设置,确保运行该进程的帐户可以访问代理服务器。 如果您的进程在 LocalService 或 NetworkService 下运行,那么这可能不起作用。您可能需要一个域帐户。

    【讨论】:

      【解决方案4】:

      目录服务/LDAP 查找可用于实现此目的。它涉及基础架构级别的一些更改,但大多数生产环境都有这样的规定

      【讨论】:

      • 我不知道这会有什么帮助。如果这很重要,服务器不在同一个域中..
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-16
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多