修复 ASP.NET Core OIDC 登录中的服务端代理路由
在已注册的 OpenID Connect 方案上设置 BackchannelHttpHandler 以处理发现和令牌请求,除非应用已提供完整的 Backchannel 客户端。
浏览器能打开身份提供方的登录页,并不证明 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 客户端有各自的配置路径。