使用Windows标识使用.IsInRole方法检查用户自定义角色

时间:2013-11-28 14:10:29

标签: security asp.net-mvc-4 windows-authentication roleprovider principal

我创建了一个MVC应用程序,用户可以通过ADFS或Forms登录进行身份验证。在这两种情况下,我都可以使用User.IsInRole方法检查我的用户表,该用户表具有与之关联的roleID属性我的数据库中的角色表。这是通过在我的webconfig中包含以下部分来完成的:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="DefaultRoleProvider" type="MyInternal.Providers.MyProvider, MyInternal" connectionStringName="MyContext" />
  </providers>
</roleManager>

我现在正在尝试实施Windows身份验证并设法获取用户域登录名等,但在尝试按照与其他两种身份验证类型相同的步骤时,我无法使IsInRole工作。

如何将用户从我的存储库绑定到身份验证用户。是否需要某种演员或某些东西?我认为这可能是通过ADFS和Forms中的身份验证完成的。

1 个答案:

答案 0 :(得分:1)

我能够通过在我的ViewModel中使用以下内容来解决此问题:

this.UserName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;

            if (this.UserName.Contains("\\"))
            {
                string[] stringArray = this.UserName.Split(new Char[] { '\\' });
                this.UserName = stringArray[1];

                MyUser identity = userRepository.Get(u => u.Username == this.UserName).FirstOrDefault();
                HttpContext.Current.User = identity;
            }