.NET Core 3.1 基于角色的授权失败,出现 403 异常
.NET Core 3.1 role based authorization fails, getting 403 exception
我正在尝试使用 Microsoft Identity 库进行基于角色的授权,但失败了。
- 我可以验证用户
- 我看到用户所属的角色与我在控制器上的角色匹配
- 当我转到那个控制器时,我收到 403 禁止错误
我不知道如何进一步调试它。
启动:
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 ...
}
您应该将 ClaimsIdentity.RoleClaimType 类型的声明添加到其角色的 jwt 令牌中
我正在尝试使用 Microsoft Identity 库进行基于角色的授权,但失败了。
- 我可以验证用户
- 我看到用户所属的角色与我在控制器上的角色匹配
- 当我转到那个控制器时,我收到 403 禁止错误
我不知道如何进一步调试它。
启动:
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 ...
}
您应该将 ClaimsIdentity.RoleClaimType 类型的声明添加到其角色的 jwt 令牌中