授权角色/策略属性在.Net Core 3中不起作用

时间:2019-10-14 08:38:40

标签: asp.net-core .net-core identityserver4 asp.net-core-identity .net-core-3.0

我没有运气在.Net Core 3中使用任何角色或策略属性。我使用带有身份验证的.Net Core Angular入门项目启动了我的项目。 我认为这与新的.AddDefault方法有关,因此我已尽可能地简化了它,但仍然无法正常工作。

这是我的政策:

DATE

这是我的控制人:

services.AddAuthorization(options =>
{
    options.AddPolicy("IsAdmin", policy =>
        policy.RequireClaim("role", "admin"));
});

我做了一个自定义配置文件服务,将声明添加到令牌中,

[Authorize(Policy = "IsAdmin")]
[Route("api/[controller]")]
public class AdminController : Controller 
{
    ...

在我的访问令牌内部(来自jwt.io):

enter image description here

配置服务的其他部分:

var claims = new List<Claim>();

if (await _userManager.IsInRoleAsync(user, "Admin"))
{
    claims.Add(new Claim(JwtClaimTypes.Role, "admin"));
}

context.IssuedClaims.AddRange(claims);

普通的services.AddDefaultIdentity<ApplicationUser>() .AddRoles<IdentityRole>() .AddEntityFrameworkStores<ApplicationDbContext>(); ... services.AddAuthentication() .AddIdentityServerJwt(); 标签与其他控制器上的访问令牌配合正常。

当我使用访问令牌点击此控制器时,我会收到[Authorize]响应

我缺少什么使它无法正常工作?

1 个答案:

答案 0 :(得分:6)

我尝试您的代码,发现role声明密钥已转换为standard Role ClaimsTypehttp://schemas.microsoft.com/ws/2008/06/identity/claims/role

enter image description here

因此使用ClaimTypes.Role将解决问题:

services.AddAuthorization(options => { 
    options.AddPolicy("IsAdmin", policy => 
    { 
        policy.RequireClaim(ClaimTypes.Role,"admin");
    }); 
});

演示

enter image description here