【问题标题】:.NET Core 3.1 role based authorization fails, getting 403 exception.NET Core 3.1 基于角色的授权失败,出现 403 异常
【发布时间】:2020-05-21 14:31:15
【问题描述】:

我正在尝试使用 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))
        };
    });

我的控制器有一个角色:

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

Repo url

【问题讨论】:

  • 能否分享services.addauthorization的代码。您是否制定了政策?
  • @PrateekKumarDalbehera 我把repo的链接放在问题中
  • 会变成 404 ????
  • @PrateekKumarDalbehera 请再试一次。我不确定

标签: c# .net-core asp.net-core-identity


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 2020-05-27
    • 1970-01-01
    • 2020-08-02
    • 2020-02-16
    • 1970-01-01
    • 2020-09-24
    • 2021-03-12
    • 2021-09-04
    相关资源
    最近更新 更多