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

.NET Core 2 Web API JWT Token不被识别,授权验证失败求助

排查JWT授权中Identity未填充的问题

我之前也碰到过类似的JWT授权踩坑经历,结合你描述的情况——Token生成正常但请求时Identity无法填充、带[Authorize]返回404、不带时User.Identity.IsAuthenticated为false,给你几个针对性的排查方向:

  • 确认中间件注册与管道顺序
    这是最容易踩的坑!一定要保证身份验证相关的配置在授权之前,管道执行顺序也不能乱:

    // 服务注册顺序
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options => {
            // 你的JWT配置:ValidIssuer、ValidAudience、IssuerSigningKey等必须和生成Token时一致
        });
    builder.Services.AddAuthorization();
    
    // 管道执行顺序
    app.UseAuthentication(); // 先验证身份
    app.UseAuthorization();  // 再做授权判断
    

    如果顺序反过来,授权逻辑会先执行,此时Identity还没被填充,自然会验证失败。

  • 校验Token内容与配置匹配度
    用JWT.io解析你的Token,重点检查这几个字段:

    • iss(签发者)、aud(受众)必须和你在AddJwtBearer里配置的ValidIssuer、ValidAudience完全一致;
    • exp(过期时间)是否在有效期内;
    • 生成Token时是否添加了必要的Claim(比如ClaimTypes.NameIdentifier、ClaimTypes.Name),这些Claim是填充Identity的关键。
  • 检查请求头格式正确性
    即使你确认Token没问题,也要再核对请求头:必须是Authorization: Bearer <你的Token>,注意Bearer后面有一个空格!很多时候手动输入会漏这个空格,导致JWT中间件识别不到Token。Postman里建议直接在「Authorization」标签选择「Bearer Token」,粘贴Token后自动生成正确请求头,避免手动错误。

  • 排查[Authorize]与路由的关联问题
    你提到添加[Authorize]后返回404,这可能不是授权失败,而是路由未匹配!先去掉[Authorize],用Postman调用该接口确认能正常返回200。如果没问题,再尝试给[Authorize]指定授权Scheme:

    [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
    

    强制接口使用JWT授权,避免其他授权Scheme干扰。

  • 启用调试日志定位根因
    给身份验证模块开启Debug级日志,能直接看到Token解析、验证的全过程:

    builder.Logging.AddFilter("Microsoft.AspNetCore.Authentication", LogLevel.Debug);
    

    运行程序后查看控制台日志,你会看到诸如「Token签名验证失败」「Issuer不匹配」「Token已过期」等具体错误信息,这是定位问题最直接的方式。

  • 纠正Identity属性的误用
    你提到的User.Identity.IsAuthorized应该是IsAuthenticated吧?IsAuthenticated才是判断用户是否通过身份验证的属性,如果它为false,说明身份验证环节根本没通过,优先排查前面的Token和中间件配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:16:56