【发布时间】:2020-02-17 09:14:30
【问题描述】:
之前在 .NET Framework 中,我使用自定义 RoleProvider 和 Windows 身份验证来针对当前主体提供自定义角色,而不是使用 Active Directory 组。
因此,目标是能够使用装饰性[Authorize(Roles="")] 属性,其中角色来自数据库而不是活动目录(或者两者的组合都可以)。
为了在核心中实现这一点,我相信我需要使用IClaimsTransformation 来分配角色声明,正如here 所讨论的那样。
在这里,我只是想添加一个角色“管理员”,但是当我使用 [Authorize(Roles = "Admin")] 时,我得到了 403 Unauthorized 响应。
Startup.cs
services.AddRazorPages();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddSingleton<IClaimsTransformation, ClaimsTransformer>();
-------
app.UseAuthorization();
ClaimsTransformer.cs
public class ClaimsTransformer : IClaimsTransformation
{
public async Task<ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
{
var identity = (ClaimsIdentity)principal.Identity;
var c = new Claim(identity.RoleClaimType, "Admin");
identity.AddClaim(c);
return await Task.FromResult(principal);
}
}
令人讨厌的是,当我调用 User.IsInRole() 时,这有效,并且当我检查声明时可以看到该组,因此它正在被添加,但是它不适用于 Authorize 属性。任何建议将不胜感激。
【问题讨论】:
标签: c# .net-core authorization windows-authentication