2017-07-28 112 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