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
相关产品推荐
相关产品推荐

