我的API正在使用UseJwtBearerAuthentication
而HttpContext.User.IsAuthenticated
的值为True
,因此我可以在我的控制器上使用[Authorize]
。
但现在我想使用基于角色的身份验证,例如[Authorize(Policy = "TestPolicy")]
。我使用Startup.cs
扩展程序在AddAuthorization(...)
上添加了所需的政策。
请求返回code 403
(未授权),因为未填充HttpContext.User.Identity.Roles。
我创建了一个中间件来填充此属性,我可以使用UserManager.GetRolesAsync(user)
获取用户的角色。现在我有一个用户角色列表,但是如何将其添加到curent HttpContext.User
以便用户可以获得我添加的策略的授权?
答案 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