2017-07-28 76 views
0

我的API使用的是UseJwtBearerAuthenticationHttpContext.User.IsAuthenticated的值为True,所以我可以在我的控制器上使用[Authorize]在运行时为ASP.NET Core API授权添加用户角色

但现在我想使用基于角色的身份验证,如[Authorize(Policy = "TestPolicy")]。我使用AddAuthorization(...)扩展名在我的Startup.cs上添加了所需的策略。

请求返回code 403(未经授权),因为未填充HttpContext.User.Identity.Roles。

我创建了一个中间件来填充这个属性,我可以通过UserManager.GetRolesAsync(user)得到用户的角色。现在我有一个用户角色列表,但是如何将其添加到帐户HttpContext.User以便用户可以通过我添加的策略进行授权?

回答

1

,同时在与智威汤逊的要求JWT商店的角色,和创建权限要求:

public class PermissionHandler : AuthorizationHandler<PermissionRequirement> 
    { 
     protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, PermissionRequirement requirement) 
     { 

      if (context.User.HasClaim(c => c.Type == "role" && c.Value = 
requirement.Permission)) 
      { 
       System.Console.WriteLine("User has required permission: " + requirement.Permission); 
       context.Succeed(requirement); 
       return Task.CompletedTask; 
      } 
      System.Console.WriteLine("User is forbidden"); 
      return Task.CompletedTask; 
     } 
    } 

收银台下面的详细信息:

你有

https://github.com/adnan-kamili/AspNetCore-Web-Api-Rest-Starter-Kit

+0

尼斯入门套件,采取了许多细节考虑。 – RBasniak