ASP.NET Core 3.1配置无well-known地址的OpenID Connect如何手动填参数
结论
可以手动填写所有OpenID Connect所需配置,无需依赖自动拉取.well-known元数据地址。
实现方式
你只需要在OIDC配置中手动为Configuration属性赋值OpenIdConnectConfiguration对象即可,完整配置示例如下:
首先引入所需命名空间:using Microsoft.IdentityModel.Protocols.OpenIdConnect;
然后修改你的服务注册代码:
.AddOpenIdConnect(cfg => { // 手动配置OIDC元数据,替代自动拉取 cfg.Configuration = new OpenIdConnectConfiguration { Issuer = "https://myurl.io", AuthorizationEndpoint = "https://myurl.io/oauth2/authorize", TokenEndpoint = "https://myurl.io/oauth2/token", UserInfoEndpoint = "https://myurl.io/oauth2/userinfo", JwksUri = "https://myurl.io/oauth2/jwks", // 按需补充结束会话端点等其他所需配置 }; cfg.ClientId = "123455555"; cfg.ClientSecret = "11111"; cfg.ResponseType = "code"; cfg.Scope.Clear(); cfg.Scope.Add("openid"); // 配置令牌验证参数 cfg.TokenValidationParameters.ValidIssuer = "https://myurl.io"; });
注意事项
- 所有手动填写的端点地址需要和你所用的OIDC身份提供商实际提供的地址完全一致,否则会出现授权、令牌兑换等流程失败
- 上述配置仍保留了
JwksUri配置,框架会自动拉取签名公钥用于令牌验签。如果你的身份提供商密钥不会频繁轮换,也可以手动配置TokenValidationParameters.IssuerSigningKey属性指定签名公钥,完全关闭所有外部元数据拉取行为,但不推荐该做法,密钥过期后需要手动修改代码重新发布 - 如果你后续想要排查自动拉取元数据失败的原因,可以在服务启动时添加
IdentityModelEventSource.ShowPII = true;配置,即可看到错误信息中隐藏的具体请求地址和详细报错。
内容的提问来源于stack exchange,提问作者Ronaldo Lanhellas
相关产品推荐
相关产品推荐

