Web Services 是否可以在web.config中指定代理凭据?

bfrts1fy  于 2022-11-15  发布在  其他
关注(0)|答案(5)|浏览(237)

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

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

我知道你可以通过代码做到这一点,但该网站运行的软件是一个封闭源代码的CMS,所以我不能这样做。
有什么办法可以做到这一点吗?MSDN是没有帮助我太多..

6rqinv9w

6rqinv9w1#

是的,可以指定您自己的凭证而不修改当前代码。不过这需要您的一小段代码。
使用此类创建名为 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中添加一些信息,这要容易得多。

iezvtpos

iezvtpos2#

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

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

要做到这一点,关键是更改IIS设置,确保运行进程的帐户可以访问代理服务器。如果您的进程在LocalService或NetworkService下运行,那么这可能无法工作。很可能,您需要一个域帐户。

djp7away

djp7away3#

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

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

1.在控制面板\所有控制面板项目\凭据管理器〉〉添加一般凭据
Internet或网络地址:您的代理地址
用户名:您的用户名
密码:您通过
这种配置对我来说很有效,无需更改代码。

djmepvbi

djmepvbi4#

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

isr3a4wc

isr3a4wc5#

虽然它很晚,但它可能是有帮助的人寻找解决相同的问题。我遇到了这个问题后,有相同的问题。我给我的解决方案的问题,我是如何使它工作。我创建了代理使用使用凭据像这样,

public class MyProxy : IWebProxy
{
    public ICredentials Credentials
    {
        //get { return new NetworkCredential("user", "password"); }
        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;
    }
}

然后你必须像这样在DI容器中注册HttpClient,它将完美地工作。

services.AddHttpClient("Lynx", client =>
    {
        client.BaseAddress = new Uri(Configuration.GetSection("LynxUrl").Value);
    }).ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler { Proxy = new MyProxy()});

相关问题