![](/img/trans.png)
[英]How can I authenticate a user that does not belong to Domain Users in dotnetcore?
[英]How to register HttpClient that will authenticate domain user
我必须将 HttpClient 配置为自动传递 Windows 凭据(我正在调用的公司 API 正在使用 Windows 身份验证)。 到目前为止,我在我的方法中创建了 HttpClient,如下所示:
var credentialsCache = new CredentialCache {{
new Uri("https://localhost"),
"NTLM",
CredentialCache.DefaultNetworkCredentials
}};
var handler = new HttpClientHandler { Credentials = credentialsCache };
var client = new HttpClient(handler);
但由于这可能导致套接字耗尽,我想使用工厂。 因此在Startup.cs
我会像这样添加 HttpClient :
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddHttpClient();
}
然后我会通过构造函数将工厂注入到我的服务中:
public class MyService
{
private readonly IHttpClientFactory clientFactory;
public MyService(IHttpClientFactory clientFactory)
{
this.clientFactory = clientFactory;
}
public async Task MakeHttpRequest()
{
var request = new HttpRequestMessage(HttpMethod.Get, "https://localhost/endpoint");
var client = clientFactory.CreateClient();
var response = await client.SendAsync(request);
// ...
}
}
如何配置以这种方式创建的客户端以使用网络凭据? 理想情况下,我只想在ConfigureServices()
中配置一次
您可以查看命名客户端并使用ConfigurePrimaryHttpMessageHandler
方法
services
.AddHttpClient("myService")
.ConfigurePrimaryHttpMessageHandler(() => new HttpClientHandler()
{
Credentials = credentialsCache
});
MyService
中的HttpClient
应该使用给定的名称创建
...
var client = clientFactory.CreateClient("myService");
...
您可以使用选项模式来设置IHttpClientFactory
如何创建HttpClient
的配置。 您可以通过以下方式配置这些选项
未命名的选项,这些将应用于工厂创建的所有HttpClient
实例
services.Configure<HttpClientFactoryOptions>(options =>
{
options.HttpMessageHandlerBuilderActions.Add(builder =>
{
var credentialsCache = new CredentialCache {{
new Uri("https://localhost"),
"NTLM",
CredentialCache.DefaultNetworkCredentials
}};
builder.PrimaryHandler = new HttpClientHandler { Credentials = credentialsCache };
});
});
命名选项,这些仅适用于您将名称传递给工厂上的CreateClient
方法的HttpClient
实例
services.Configure<HttpClientFactoryOptions>("myclient", options =>
{
options.HttpMessageHandlerBuilderActions.Add(builder =>
{
var credentialsCache = new CredentialCache {{
new Uri("https://localhost"),
"NTLM",
CredentialCache.DefaultNetworkCredentials
}};
builder.PrimaryHandler = new HttpClientHandler { Credentials = credentialsCache };
});
});
要使用命名选项,你会做
var client = clientFactory.CreateClient("myclient");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.