使用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组使用的因素?

使用Windows身份验证的[Authorize(Roles = "Administrators")

通过在当前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美分。