You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 6升级到.NET 8后使用OIDC报错:请求URI无效

.NET 8升级后OIDC授权码回调时的URI错误解决方案

这个问题是.NET 8对HttpClient的相对URI处理逻辑收紧导致的——OIDC中间件内部用HttpClient请求Token端点时,.NET 8不再允许无BaseAddress的情况下使用相对URI,而.NET 6及之前版本对此限制更宽松。以下是具体解决办法:

  • 确保TokenEndpoint配置为绝对URI
    在AddOpenIdConnect的配置代码里,直接指定完整的Token端点绝对URL,不要用相对路径:

    services.AddOpenIdConnect("oidc", options =>
    {
        // 其他原有配置
        options.TokenEndpoint = "https://你的身份服务器地址/token";
    });
    
  • 显式设置OIDC后台HttpClient的BaseAddress
    如果身份服务器的元数据地址(MetadataAddress)是正确的绝对URI,但仍出现错误,可以给OIDC中间件使用的后台HttpClient指定BaseAddress:

    services.AddOpenIdConnect("oidc", options =>
    {
        // 其他原有配置
        options.Backchannel = new HttpClient
        {
            BaseAddress = new Uri("https://你的身份服务器地址/")
        };
    });
    

    也可以通过命名HttpClient的方式配置,更符合DI最佳实践:

    services.AddHttpClient("OidcBackchannel")
        .ConfigureHttpClient(client =>
        {
            client.BaseAddress = new Uri("https://你的身份服务器地址/");
        });
    
    services.AddOpenIdConnect("oidc", options =>
    {
        // 其他原有配置
        options.BackchannelHttpClientName = "OidcBackchannel";
    });
    
  • 检查身份服务器的元数据响应
    访问身份服务器的/.well-known/openid-configuration端点,确认返回的token_endpoint是绝对URI而非相对路径。如果元数据里是相对路径,要么在身份服务器端修正配置,要么在客户端手动指定绝对的TokenEndpoint。

内容的提问来源于stack exchange,提问作者Brian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 14:34:56