63

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

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

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

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

4

4 回答 4

106

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

使用此类创建一个名为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中添加一些信息,这要容易得多。

于 2008-10-11T18:29:33.220 回答
20

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

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

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

于 2009-05-17T23:03:13.677 回答
8

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

1 在 Web.config 中

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

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

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

于 2015-06-26T21:28:11.903 回答
1

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

于 2008-10-09T11:38:39.677 回答