.NET 7自定义OAuth服务器openid-configuration端点未触发求助
解决方案:客户端未调用OpenID Connect发现端点的问题
针对你在.NET 7中自定义OAuth认证服务器时,客户端未触发/.well-known/openid-configuration请求的问题,可按以下步骤排查解决:
1. 确保认证挑战被触发
OpenID Connect中间件仅在需要认证时才会发起发现请求。默认启动客户端打开首页如果不需要授权,不会触发认证流程。
解决方法:
在客户端的HomeController的Index方法上添加[Authorize]特性,强制访问首页时触发认证:
using Microsoft.AspNetCore.Authorization; public class HomeController : Controller { [Authorize] public IActionResult Index() { return View(); } }
启动客户端后访问首页,此时会触发认证流程,中间件会自动调用服务器的发现端点。
2. 修复服务器发现端点的路由配置
当前服务器的发现端点路由可能存在匹配问题,ASP.NET Core路由需要明确绝对路径才能正确匹配根路径下的.well-known端点。
解决方法:
修改控制器动作的路由特性为绝对路径:
[HttpGet("/.well-known/openid-configuration")] // 确保是绝对路径 public JsonResult GetConfiguration() { // 原代码保持不变 }
修改后手动访问https://localhost:7250/.well-known/openid-configuration,确认能返回正确的JSON数据,排除服务器端路由问题。
3. 显式配置OpenID Connect元数据地址
在客户端的OIDC配置中手动指定元数据地址,强制中间件加载发现文档:
.AddOpenIdConnect(OpenIdConnectDefaults.AuthenticationScheme, options => { options.Authority = "https://localhost:7250"; options.MetadataAddress = "https://localhost:7250/.well-known/openid-configuration"; // 添加此行 options.ClientId = "platformnet7"; options.ClientSecret = "123456789"; options.ResponseType = "code"; options.CallbackPath = "/signin-oidc"; options.SaveTokens = true; // 其余配置保持不变 });
4. 信任开发环境HTTPS证书
开发环境下自签名HTTPS证书可能不被信任,导致中间件无法发起请求。运行以下命令信任证书:
dotnet dev-certs https --trust
验证步骤
- 启动认证服务器,确保
/.well-known/openid-configuration可正常访问。 - 启动客户端,访问带
[Authorize]的页面,查看Chrome DevTools的Network标签,此时应能看到对发现端点的请求。
内容的提问来源于stack exchange,提问作者Matteo Pietro Peru
相关产品推荐
相关产品推荐

