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

ASP.NET Core中JWT授权异常:请求返回403 Forbidden排查求助

问题原因及解决方案

核心问题:JWT角色声明的类型不匹配

ASP.NET Core默认会把JWT payload中的role声明,自动映射到标准Claim类型http://schemas.microsoft.com/ws/2008/06/identity/claims/role(对应ClaimTypes.Role枚举值),而你的授权策略里直接要求type=role的声明,两者不匹配,导致授权失败返回403。

两种解决办法:

办法一:修改授权策略,使用标准角色Claim类型

在Program.cs的授权配置中,引用System.Security.Claims命名空间,然后将策略改为检查标准角色类型:

using System.Security.Claims;

builder.Services.AddAuthorization(options =>
    options.AddPolicy("admin", policy =>
        policy.RequireClaim(ClaimTypes.Role, "admin")));

办法二:修改JWT验证配置,保留原role声明类型

如果希望保持JWT中的role声明类型不变,需要在配置JWT认证时,指定角色声明的类型为role:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        options.TokenValidationParameters = new TokenValidationParameters
        {
            // 补充你的其他验证参数(如ValidIssuer、ValidAudience、IssuerSigningKey等)
            RoleClaimType = "role" // 告诉框架直接使用JWT中的"role"作为角色声明类型
        };
    });

额外检查点

确保app.UseAuthentication();中间件在app.UseAuthorization();之前注册,认证是授权的前提,顺序错误也会导致授权失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:27:26