gpt4 book ai didi

c# - 使用 HttpClient 将 Windows 身份验证传递给代理

转载 作者:行者123 更新时间:2023-11-30 16:37:48 24 4
gpt4 key购买 nike

我试图将 Windows 身份验证传递给 WebProxy,这样用户就不必手动输入他的登录数据。用例是一个代理服务器,它根据 LDAP/AD 服务器检查身份验证,而用户必须定期更改密码。

我有以下代码:

private void button1_ClickAsync(object sender, EventArgs e) {
Url = "http://local.adress/test";
Execute();
}

private void button2_Click(object sender, EventArgs e) {
Url = "https://maps.googleapis.com/maps/api/timezone/json";
Execute();
}

private void Execute() {
var handler = new HttpClientHandler();
handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials;
handler.UseDefaultCredentials = true;
handler.UseProxy = true;
handler.Proxy = WebRequest.DefaultWebProxy;
handler.Proxy.Credentials = new NetworkCredential("mydomainuser", "mydomainpassword");
//handler.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;

var client = new HttpClient(handler);
Task<string> response = TestConnection(client, Url);
}

private async Task<string> TestConnection(HttpClient client, string url) {
try {
using (HttpResponseMessage result = await client.GetAsync(url)) {
string res = await result.Content.ReadAsStringAsync().ConfigureAwait(false);
Console.WriteLine("content: " + res);
return result.ToString();
}
} catch (Exception e) {
Console.WriteLine("error: " + e.Message);
return e.ToString();
}
}

当手动定义凭据时(如您在 Execute 方法中所见),一切都按预期工作。我检查了代理日志文件以确保请求确实通过代理转发。

因为我的目标是避免用户输入他可能会定期更改的密码,所以我尝试通过 CredentialCache.DefaultNetworkCredentials 传递凭据(我也尝试过 CredentialCache .DefaultCredentials)。在执行请求时,代理会记录一个 DENIED 并且我的客户端返回 HTTP 错误代码 407。

我是否遗漏了一些明显的东西?我知道关于这个话题有无数的问题,但似乎没有什么可以解决这个问题。

最佳答案

您必须在代码中定义代理和主 URL。

var TARGETURL = "http://en.wikipedia.org/";

HttpClientHandler handler = new HttpClientHandler()
{
Proxy = new WebProxy("http://127.0.0.1:8888"),
UseProxy = true,
};

试试这个。

handler.Proxy.Credentials = CredentialCache.DefaultNetworkCredentials;
handler.Credentials = CredentialCache.DefaultNetworkCredentials;

好的,您的 webserivces 使用 windows 身份验证。 您的桌面客户端正在您的凭据下工作,您需要模拟 https://learn.microsoft.com/en-us/dotnet/api/system.security.principal.windowsidentity.impersonate?view=netframework-4.8

如果它是基本身份验证,请检查它是否适合您。

HttpClient client = new HttpClient(handler);

**var byteArray = Encoding.ASCII.GetBytes("username:password1234");**


**client.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));**

关于c# - 使用 HttpClient 将 Windows 身份验证传递给代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57091142/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com