在运行时为ASP.NET Core API授权添加用户角色

时间:2017-07-28 17:32:44

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

我的API正在使用UseJwtBearerAuthenticationHttpContext.User.IsAuthenticated的值为True,因此我可以在我的控制器上使用[Authorize]

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

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

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

1 个答案:

答案 0 :(得分:1)

在jwt中创建jwt store角色作为声明,并创建权限要求:

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