我正在使用Windows身份验证构建MVC 5 webapp。 由于我有外部授权存储,所以我想添加一些自定义声明身份验证。我处理PostAuthenticationRequest事件
void Application_PostAuthenticateRequest()
{
if (Request.IsAuthenticated)
{
var id = ClaimsPrincipal.Current.Identities.First();
...
//query authorization store
id.AddClaim(new Claim(ClaimTypes.Role, "SomeRole"));
}
}
然后在控制器中,我检查IsInRole(“SomeRole”),但我发现它总是返回false,即使身份具有SomeRole角色声明
然后我发现在Windows身份验证中,IsInRole()使用groupid声明作为角色
不是将我的自定义声明添加到groupsid声明,而是如何设置IsInRole函数使用标准的Role声明?
看起来像RoleClaimType是要走的路,但它是readonly我无法设置它。
答案 0 :(得分:0)
我认为您无法更改WindowsPrincipal.IsInRole
方法的行为。
您可以使用ClaimsPrincipal
声明从新ClaimsIdentity
创建新的WindowsPrincipal
。其中一个ClaimsIdentity
constructors可让您指定nameType
和roleType
。
设置了新的ClaimsPrincipal后,您的IsInRole调用应该适用于指定的roleType。