IdentityModel.反向通道HttpClient的代理凭据存在AspNetCore问题



我使用的是IdentityModel。AspNetCore在后台服务中管理客户端访问令牌。只有通过使用windows身份验证的公司代理服务器才能访问互联网。

代理服务器是在Windows选项中配置的,后台服务会检测设置,但身份验证不起作用,我经常收到The proxy tunnel request to proxy 'http://proxy:8080/' failed with status code '407'。如何配置HttpClient以使用windows凭据对代理服务器进行身份验证?

我已经尝试了以下方法,但这不起作用:

services.AddAccessTokenManagement(options =>
{
options.Client.Clients.Add("sapci", new ClientCredentialsTokenRequest
{
Address = hostContext.Configuration["HttpProxy:TokenEndpoint"],
ClientId = hostContext.Configuration["HttpProxy:ClientId"],
ClientSecret = hostContext.Configuration["HttpProxy:ClientSecret"],
GrantType = OidcConstants.GrantTypes.ClientCredentials,
AuthorizationHeaderStyle = BasicAuthenticationHeaderStyle.Rfc2617,
ClientCredentialStyle = ClientCredentialStyle.AuthorizationHeader
});
})
.ConfigureBackchannelHttpClient(client => new HttpClient(new HttpClientHandler()
{
DefaultProxyCredentials = CredentialCache.DefaultCredentials,
}));

我相信你可以在应用程序启动时做到这一点,以确保你捕获所有客户端用法:

HttpClient.DefaultProxy = new WebProxy()
{
Credentials = CredentialCache.DefaultCredentials
}:

我会把你的问题简化为部署一个最小的控制台应用程序,并使用与你的服务相同的用户帐户等运行它。一旦工作,你的主应用程序也会。

有时这些事情也与基础设施有关:例如,在过去,对于IIS群集环境,我不得不使用服务帐户并注册服务主体名称,例如,防止使用计算机帐户。我怀疑这与。Net Core/Kestrel,我想你正在使用它。

相关内容

最新更新