.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
相关产品推荐
相关产品推荐

