目前 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)); }
- 1 回答
- 0 关注
- 497 浏览
添加回答
举报
0/150
提交
取消