我有一个ASP.NET MVC 4站点,它使用Windows身份验证来限制用户访问。
在控制器上[Authorize(Roles = "Administrators")]
已应用。
该站点在IIS的本地计算机上运行。 访问该站点时(也来自我的本地计算机)访问被拒绝,即使我的用户帐户是管理员组的成员。
我已按照此帖中的建议尝试指定“BUILTIN\Administrators
”:How do I make AuthorizeAttribute work with local Administrators group in ASP.NET MVC 3 intranet application?
但没有成功。
如果我创建了一个像“ TestGroup ”这样的新群组,请将我的用户帐户分配给该群组并在我的控制器上使用[Authorize(Roles = "TestGroup")]
- 然后我就可以访问控制器了
管理员组是否有一些特殊限制(出于安全原因可能?),还是有其他可能影响管理员组使用的内容?
答案 0 :(得分:2)
通过在当前的ASP.NET标识中列出声明:
(System.Web.HttpContext.Current.User.Identity
as System.Security.Principal.WindowsIdentity)
.Claims
.ToArray();
您会看到管理员组(SID:S-1-5-32-544)存在denyonlysid
类型的声明。对User.IsInRole("Administrators")
的调用将失败。
我认为,重点是当前用户永远不会成为管理员组的一部分,除非您关闭UAC和/或以管理员身份运行浏览器 。
我已经完成了这两件事(浏览器是在localhost上启用了NTLM的Firefox)和ta-dah,一切都按预期工作:
System.Web.HttpContext.User.IsInRole("Administrators")
true
(System.Web.HttpContext.User.Identity
as System.Security.Principal.WindowsIdentity)
.Claims
.ToArray()
{System.Security.Claims.Claim[19]}
[0]: {http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name: Domain\Mauro}
[...]
[8]: {http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid: S-1-5-32-544}
最后,您不应将管理员组用于基于声明的身份验证。最好引入自定义域/本地组。
只需2美分。