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

ASP.NET Core JWT授权校验时自定义Claims全部为空问题求助

问题排查及修复方案

1. 受众校验配置不匹配

这是最核心的错误:

  • 生成JWT令牌时,传入的受众参数为_config["Jwt:audience"]
  • 校验参数中ValidAudience错误配置为Configuration["Jwt:Issuer"],和生成时的受众值不一致,导致JWT校验直接失败,身份信息未被解析,所以Claims全部为空
    修复方案:将Startup中JWT配置的ValidAudience改为对应配置项:
ValidAudience = Configuration["Jwt:audience"],

2. 中间件执行顺序错误

如果你的Configure方法中没有按照正确顺序注册中间件,也会导致身份未提前解析:
必须保证UseAuthentication在UseAuthorization之前执行,示例正确顺序:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // 其他中间件比如Cors、异常处理等放在前面
    app.UseCors("CorsPolicy");
    
    app.UseRouting();
    
    // 先执行身份认证
    app.UseAuthentication();
    // 再执行授权校验
    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
}

3. 接口未添加授权特性

如果要访问的接口没有加[Authorize]特性,框架不会自动解析JWT令牌填充context.User,也会出现Claims为空的情况,确保需要校验的接口添加对应特性:

[Authorize]
[ApiController]
[Route("api/[controller]")]
public class YourController : ControllerBase
{
    // 接口实现
}

可选优化

可以在TokenValidationParameters中添加时钟偏移配置,避免服务器时间差导致的有效期校验误判:

ClockSkew = TimeSpan.Zero,

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:00:04