IdentityModel.AspNetCore 反向通道 HttpClient 的代理凭证问题

IdentityModel.AspNetCore problem with proxy credentials for backchannel HttpClient

我正在使用 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 相关,我假设您正在使用它。