我正在构建一个 ASP.NET MVC4 Razor 应用程序,我想使用 Windows 身份验证来限制作为特定 Windows 组成员的用户对各种功能的访问。我正在一个未加入域的 Windows 8 VM(名为 MYVM)上开发,但该应用程序将部署在将加入域的 Win2008 服务器上。
我已将 web.config 配置如下:
<authorization>
<deny users="?" />
</authorization>
<roleManager enabled="true" defaultProvider="AspNetWindowsTokenRoleProvider"/>
身份验证有效 - @User.Identity.Name 显示“MYVM\MYUSERNAME”
但是,尽管我已将我的帐户添加到几个 Windows 组,但对 @User.IsInRole("GROUP_NAME") 的调用始终返回 false。
我怀疑这是因为我的开发虚拟机没有加入域。有谁知道 ASP.NET MVC 中的 Windows 身份验证是否适用于工作组角色以及域角色?
编辑
我发现我可以枚举角色 - 这给出了:
?System.Web.Security.Roles.GetRolesForUser()
{string[9]}
[0]: "None"
[1]: "CONSOLE LOGON"
[2]: "Everyone"
[3]: "NT AUTHORITY\\This Organization"
[4]: "NT AUTHORITY\\INTERACTIVE"
[5]: "NT AUTHORITY\\Authenticated Users"
[6]: "NT AUTHORITY\\NTLM Authentication"
[7]: "LOCAL"
[8]: "BUILTIN\\Users"
但是,当我在“管理计算机”屏幕中查看我的组成员身份时,我属于以下组:
Administrators
Users
GROUP_NAME
所以:@User.IsInRole("None") 返回 true;@User.IsInRole("GROUP_NAME") 返回 false。
GetRolesForUser 从哪里获取组列表?