浏览器能打开身份提供方的登录页,并不证明 ASP.NET Core 服务器能获取提供方元数据或交换令牌。这些服务端请求走的是 OpenID Connect backchannel。

对于已存在、名为 oidc 的方案,在服务配置阶段、身份验证请求开始之前配置其处理程序:

services.Configure<Microsoft.AspNetCore.Authentication.OpenIdConnect
    .OpenIdConnectOptions>("oidc", options =>
{
    options.BackchannelHttpHandler =
        new System.Net.Http.HttpClientHandler
        {
            UseProxy = true,
            Proxy = new System.Net.WebProxy(
                "http://proxy.example.net:8080")
        };
});

把 oidc 换成实际注册的方案名。保留 authority、client 和令牌校验设置。如果代理需要账号,把相应凭据附加到 WebProxy。

检查应用是否已经把 options.Backchannel 作为完整的 HttpClient 提供。如果是,直接配置该客户端的路由:ASP.NET Core 在创建默认 backchannel 时使用 BackchannelHttpHandler,而不是用来替换已经提供的客户端。

用服务器失败的发现或令牌请求来评估该设置。对于公开的 HTTP 路由,HTTP 代理列表 提供了 WebProxy 地址的候选。浏览器代理策略和无关的 HTTP 客户端有各自的配置路径。

相关文章