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

ASP.NET Web API添加[Authorize]后返回404错误的JWT授权问题

ASP.NET Web API 加[Authorize]后返回404?按这些步骤排查

1. 先确认路由是否真的匹配

别上来就纠结授权,先检查请求URL和控制器/Action的路由是否完全对应:

  • 控制器上的[Route("api/[controller]")]有没有写错,Action上的[HttpGet("xxx")]这类路由模板是否和请求路径一致。
  • 本地测试正常的话,部署到Azure后要确认没有因为环境变量或部署脚本修改了路由配置。

2. 中间件顺序绝对不能错

Startup.cs里的中间件注册顺序是硬规则,必须先加身份验证,再加授权:

// 这个要在UseAuthorization前面
app.UseAuthentication();
app.UseAuthorization();

如果搞反了,授权逻辑拿不到验证后的身份信息,可能直接把请求判定为无效,返回404而非预期的401。

3. JWT验证失败可能伪装成404

很多时候不是真的找不到资源,是令牌验证通不过,但错误处理没做好导致返回404:

  • 先解码你的JWT令牌,核对iss(颁发者)、aud(受众)、exp(过期时间)是否和appsettings.json里的AuthSettings完全一致,哪怕一个字符错了都不行。
  • 检查Startup里的JWT配置代码,确保TokenValidationParameters的参数都正确绑定了配置值:
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidateAudience = true,
            ValidateLifetime = true,
            ValidateIssuerSigningKey = true,
            ValidIssuer = Configuration["AuthSettings:Issuer"],
            ValidAudience = Configuration["AuthSettings:Audience"],
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["AuthSettings:Secret"]))
        };
    });
  • 加个事件日志看看验证时到底错在哪,部署到Azure后可以通过日志流查看:
options.Events = new JwtBearerEvents
{
    OnAuthenticationFailed = context =>
    {
        Console.WriteLine($"JWT验证失败: {context.Exception.Message}");
        return Task.CompletedTask;
    }
};

4. Azure学生版环境的特殊坑

  • 检查Azure App Service的「身份验证」面板,有没有启用Azure AD或其他内置身份验证,如果和你自定义的JWT验证冲突,会直接拦截请求导致404,不需要的话就关掉。
  • 确认App Service的应用设置里,AuthSettings的Issuer、Audience、Secret有没有正确配置,别部署时漏了或者填错了。

5. 最容易忽略的小细节

控制器类和对应的Action方法必须是public的,要是写成private或者protected,路由再对也会返回404。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:28:22