.NET Core 3.1 基于角色的授权失败,出现 403 异常

Nod*_*.JS 6 c# .net-core asp.net-core-identity

我正在尝试使用 Microsoft 身份库进行角色库授权,但失败了。

  • 我可以验证用户
  • 我看到用户所属的角色与我在控制器上的角色相匹配
  • 当我去那个控制器时,我收到 403 Forbidden 错误

我不知道如何进一步调试它。

启动:

services.AddIdentity<User, UserRole>(opt => opt.User.RequireUniqueEmail = true)
    .AddRoles<UserRole>()
    .AddEntityFrameworkStores<EntityDbContext>()
    .AddDefaultTokenProviders();

var jwtSetting = _configuration
    .GetSection("JwtSettings")
    .Get<JwtSettings>();

services.AddAuthentication(options => {
        options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
    })
    .AddJwtBearer(config =>
    {
        config.RequireHttpsMetadata = false;
        config.SaveToken = true;

        config.TokenValidationParameters = new TokenValidationParameters
        {
            ValidIssuer = jwtSetting.Issuer,
            ValidAudience = jwtSetting.Audience,
            IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.Key))
        };
    });
Run Code Online (Sandbox Code Playgroud)

我的控制器角色:

[Authorize(Roles = "Internal")]
[ApiController]
[Route("Api/[controller]")]
public class UserController : BasicCrudController<User>
{
     // Stuff here ...
}
Run Code Online (Sandbox Code Playgroud)

回购网址

Sae*_*deh 9

您应该在 jwt 令牌中为其角色添加类型为ClaimsIdentity.RoleClaimType 的声明