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

ASP.NET Core 7 JWT授权异常:无Claims且返回401未授权

解决ASP.NET Core 7 JWT授权401未授权问题

1. 完善JWT认证配置

你的AddJwtBearer方法缺少核心验证参数,导致系统无法正确校验令牌有效性。修改Program.cs中的认证配置:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            // 启用签名密钥验证
            ValidateIssuerSigningKey = true,
            // 使用和生成令牌时完全相同的密钥
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(builder.Configuration.GetSection("JwtSettings:Token").Value!)),
            // 若生成令牌时未指定Issuer,设为false;若指定则需与生成逻辑一致
            ValidateIssuer = false,
            // 若生成令牌时未指定Audience,设为false;若指定则需与生成逻辑一致
            ValidateAudience = false,
            // 消除时间校验偏移量,避免服务器时间差导致的验证失败
            ClockSkew = TimeSpan.Zero
        };
    });

2. 确保令牌生成与验证参数一致性

  • 检查appsettings.json中JwtSettings:Token的配置值,确保和生成令牌时使用的密钥完全一致
  • 密钥长度需满足HmacSha256算法要求(至少16个字符/字节),过短会导致验证失败

3. 验证令牌内容

用JWT解析工具(本地调试工具即可)解析生成的令牌,确认:

  • 签名算法为HS256
  • Claims列表包含你添加的Id和Name字段
  • 令牌未过期

4. 确认API端点授权标记

确保需要授权访问的API端点添加了[Authorize]特性,示例:

[ApiController]
[Route("api/[controller]")]
[Authorize]
public class UserController : ControllerBase
{
    // 受保护的接口方法
}

完成以上修改后重新生成令牌,通过Postman携带Bearer Token测试,即可正常通过授权,HttpContext.User.Claims也会正确加载令牌中的声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:42:24