是否可以在您的 web.config 中指定代理凭据
本文关键字:代理 config web 是否 | 更新日期: 2023-09-27 17:47:22
我需要配置一个网站以通过代理访问另一台计算机上的Web服务。 我可以将网站配置为使用代理,但我找不到指定代理所需的凭据的方法,这可能吗? 这是我当前的配置:
<defaultProxy useDefaultCredentials="false">
<proxy usesystemdefault="true" proxyaddress="<proxy address>" bypassonlocal="true" />
</defaultProxy>
我知道您可以通过代码执行此操作,但是网站正在运行的软件是闭源CMS,所以我不能这样做。
有什么办法可以做到这一点吗? MSDN对我没有多大帮助。
是的,可以在不修改当前代码的情况下指定自己的凭据。不过,它需要您的一小段代码。
使用此类创建一个名为 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 等所有字符串,您可能需要实现自己的配置部分,或者在 AppSettings 中添加一些信息,这要容易得多。
虽然我还没有找到在 web.config 中指定代理网络凭据的好方法,但您可能会发现您仍然可以使用非编码解决方案,方法是将其包含在 web.config 中:
<system.net>
<defaultProxy useDefaultCredentials="true">
<proxy proxyaddress="proxyAddress" usesystemdefault="True"/>
</defaultProxy>
</system.net>
执行此操作的关键要素是更改 IIS 设置,确保运行进程的帐户有权访问代理服务器。如果你的进程在本地服务或网络服务下运行,那么这可能不起作用。很有可能,您需要一个域帐户。
您可以通过在 Windows 凭据管理器中添加代理服务器的新通用凭据来指定凭据:
1 在 Web.config 中
<system.net>
<defaultProxy enabled="true" useDefaultCredentials="true">
<proxy usesystemdefault="True" />
</defaultProxy>
</system.net>
- 在"控制面板"''"
- 所有控制面板项"''"凭据管理器">>中添加通用凭据
互联网或网络地址:您的代理地址
用户名:您的用户名
密码:您通过
此配置对我有用,无需更改代码。
目录服务/LDAP 查找可用于此目的。它涉及基础结构级别的一些更改,但大多数生产环境都有这样的规定
虽然很晚了,但对于寻找相同问题解决方案的人来说可能会有所帮助。在遇到同样的问题后,我遇到了这个问题。我正在给出我的问题解决方案,我是如何让它工作的。我使用这样的凭据创建了代理,
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()});