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

.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

验证步骤

  1. 启动认证服务器,确保/.well-known/openid-configuration可正常访问。
  2. 启动客户端,访问带[Authorize]的页面,查看Chrome DevTools的Network标签,此时应能看到对发现端点的请求。

内容的提问来源于stack exchange,提问作者Matteo Pietro Peru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:54:58