2008-10-09 75 views
56

我需要配置一个网站,通过代理访问另一台机器上的web服务。我可以将网站配置为使用代理服务器,但我无法找到指定代理服务器要求的凭据的方式,这可能吗?这是我目前的配置:是否可以在你的web.config中指定代理凭证?

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

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

有没有办法做到这一点? MSDN帮助不大。

回答

92

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

创建这个类叫做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类将首先调用您的代码并请求您自己的凭证。您需要将组装的SomeAssembly放置在CMS应用程序的bin目录中。

这是一个静态代码,为了获得所有的字符串,比如用户名,密码和URL,你可能需要实现自己的ConfigurationSection,或者在AppSettings中添加一些信息,这样更容易。

+0

我打算把这个标记为答案,因为它看起来好像它应该工作,但是我仍然遇到连接问题,到ISA Server比什么都重要.. – spmason 2008-10-13 20:09:00

+0

这真是太好了。 – Lalit 2010-05-25 13:18:11

1

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

+0

我不知道这将如何帮助。服务器不在同一个域上,如果这很重要的话。 – spmason 2008-10-09 12:31:28

14

虽然我还没有找到指定在web.config代理网络凭据的好方法,你可能会发现,你仍然可以使用非编码解决方案,通过包括这你的web.config:

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

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

2

您可以通过在Windows证书管理添加代理服务器的一个新的通用凭据指定凭据:

1在web.config中

<system.net>  
<defaultProxy enabled="true" useDefaultCredentials="true">  
<proxy usesystemdefault="True" />  
</defaultProxy>  
</system.net> 
  • 在凭据经理>>添加通用凭据
  • Internet或网络地址:您的代理地址
    用户名:您的用户名
    密码:你通过

    这个配置对我有用,没有改变代码。

    相关问题