使用Windows身份验证的[Authorize(Roles = "Administrators")
本文关键字:quot Administrators Roles 身份验证 Windows Authorize 使用 | 更新日期: 2023-09-27 18:18:57
我有一个ASP。NET MVC 4站点,使用Windows身份验证来限制用户访问。控制器上应用[Authorize(Roles = "Administrators")]
该站点正在我的本地计算机上从IIS运行。当访问站点时(也从我的本地机器)访问被拒绝,即使我的用户帐户是管理员组的成员。
我已经尝试指定"BUILTIN'Administrators
"在这篇文章中建议:我如何使AuthorizeAttribute工作与本地管理员组在ASP。NET MVC 3内部网应用?但是没有成功。
如果我创建一个新组,如"TestGroup",将我的用户帐户分配给该组,并在我的控制器上使用[Authorize(Roles = "TestGroup")]
-然后我就可以访问控制器了。
对Administrator组是否有一些特殊的限制(可能是出于安全原因?),或者是否有其他任何可能影响Administrator组使用的因素?
通过在当前ASP中列出Claims。NET身份:
(System.Web.HttpContext.Current.User.Identity
as System.Security.Principal.WindowsIdentity)
.Claims
.ToArray();
您将看到,对于Administrators组(SID: S-1-5-32-544),有一个类型为denyonlysid
的声明。对User.IsInRole("Administrators")
的调用将失败。
我认为,关键在于当前用户永远不会真正属于Administrators组,除非您关闭UAC和/或以管理员身份运行浏览器。
我已经完成了这两件事(浏览器是Firefox,在本地主机上启用了NTLM),然后,一切都如预期的那样工作:
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}
最后需要说明的是,不应该使用Administrator组进行基于声明的身份验证。最好引入自定义域/本地组。
我的2美分。