为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 ASP.NET Core 的 Middleware 中设置用户的角色

如何在 ASP.NET Core 的 Middleware 中设置用户的角色

冉冉说 2018-08-18 14:10:50
目前 middleware 中的代码是这么写的public class AuthorizeMiddleware{    private RequestDelegate _next;    public AuthorizeMiddleware(RequestDelegate next)    {         _next = next;     }    public async Task Invoke(HttpContext context, IUserService userService)    {        var identity = context.User.Identity;        if (identity.IsAuthenticated              && await userService.IsUserInRole(ROLE_NAME, identity.Name))         {             context.User.AddIdentity(new ClaimsIdentity("Basic", ClaimTypes.Role, ROLE_NAME));         }        await _next(context);     } }在 Authorization Policy 中使用这个角色进行授权,但不起作用services.AddMvc(o =>     {        var policy = new AuthorizationPolicyBuilder()             .RequireRole(ROLE_NAME)             .Build();         o.Filters.Add(new AuthorizeFilter(policy));     });请问如何解决这个问题?
查看完整描述

1 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

用 AddIdentity 是不正确的方法,需要在已有的 context.User.Identity 中添加 Claim ,但 context.User.Identity 的类型是 IIdentity ,它没有提供添加 Claim 的方法。

后来在 stackoverflow 的 Update claims in ClaimsPrincipal 中知道了可以将 context.User.Identity 转换为 ClaimsIdentity ,通过它就可以添加 Claim 了。

var claimsIdentity = context.User.Identity as ClaimsIdentity;if(claimsIdentity != null)
{
    claimsIdentity.AddClaim(new Claim(ClaimTypes.Role, ROLE_NAME));
}


查看完整回答
反对 回复 2018-09-09
  • 1 回答
  • 0 关注
  • 485 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信