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

OpenIddict令牌请求验证成功仍返回404 Not Found问题求助

排查OpenIddict客户端凭证流404问题

核心问题分析

从你的代码和现象来看,日志显示令牌请求已验证但返回404,主要是以下几个配置错误导致:


1. 重复调用AddAuthentication()导致配置丢失

你连续调用了两次services.AddAuthentication():

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = "Identity.Application";
    options.DefaultChallengeScheme = "Identity.Application";
    options.DefaultSignInScheme = "Identity.Application";
});

services.AddAuthentication(); // 这行会重置之前的认证配置

第二次调用会清空你之前设置的默认Scheme,同时覆盖OpenIddict注册的认证中间件配置,导致请求无法被正确路由处理。

修复:删除第二次services.AddAuthentication()调用,保留第一次的配置(如果不需要Identity,建议调整默认Scheme为OpenIddict的认证Scheme)。


2. EnableTokenEndpointPassthrough()的误用

你启用了EnableTokenEndpointPassthrough(),这个选项的作用是让OpenIddict完成请求验证后,将请求传递给ASP.NET Core的MVC/Razor Pages管道处理,但你并没有编写对应/connect/token端点的控制器或处理逻辑,所以验证通过后找不到响应程序,返回404。

修复:如果你不需要自定义令牌端点处理逻辑,直接移除这个选项,让OpenIddict自动处理令牌响应:

options
    .UseAspNetCore();
    // 移除.EnableTokenEndpointPassthrough();

3. 认证Scheme配置不匹配

客户端凭证流不需要依赖Identity.Application Scheme,你应该将默认认证Scheme设置为OpenIddict的认证Scheme,确保认证中间件能识别OpenIddict的处理:

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
});

4. 中间件顺序错误(额外排查点)

确保你的中间件注册顺序正确,正确顺序应该是:

app.UseRouting();
app.UseAuthentication(); // 必须在UseRouting之后,UseAuthorization之前
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
    endpoints.MapControllers();
});

修复后的完整配置示例

services.AddDbContext<MyDbContext>(options =>
{
    options.UseOpenIddict();
});

services.AddOpenIddict()
        .AddCore(options =>
        {
           options.UseEntityFrameworkCore()
                  .UseDbContext<MyDbContext>();
        })
        .AddServer(options =>
        {
           options.SetTokenEndpointUris("/connect/token");
           options.AllowClientCredentialsFlow();
           options.AddDevelopmentEncryptionCertificate()
                  .AddDevelopmentSigningCertificate();
           options.UseAspNetCore();
        });

services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = OpenIddictServerAspNetCoreDefaults.AuthenticationScheme;
});

services.AddAuthorization();
services.AddRouting();
services.AddControllers();

额外排查项

  • 确认数据库中已正确添加客户端记录(包含ClientId、ClientSecret,且明确允许客户端凭证流)
  • 检查请求的Content-Type是否为application/x-www-form-urlencoded(客户端凭证流要求的标准格式)
  • 确保没有自定义路由规则覆盖了/connect/token端点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 04:06:21