Windows身份验证使用groupid声明代替IsInRole函数中的角色声明

时间:2016-01-30 01:57:34

标签: asp.net-mvc authentication windows-authentication claims-based-identity

我正在使用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我无法设置它。

1 个答案:

答案 0 :(得分:0)

我认为您无法更改WindowsPrincipal.IsInRole方法的行为。

您可以使用ClaimsPrincipal声明从新ClaimsIdentity创建新的WindowsPrincipal。其中一个ClaimsIdentity constructors可让您指定nameTyperoleType

设置了新的ClaimsPrincipal后,您的IsInRole调用应该适用于指定的roleType。