使用Windows身份验证拒绝[授权(角色="管理员")]的访问权限

时间:2014-08-20 07:45:47

标签: c# asp.net asp.net-mvc asp.net-mvc-4 windows-authentication

我有一个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")] - 然后我就可以访问控制器了

管理员组是否有一些特殊限制(出于安全原因可能?),还是有其他可能影响管理员组使用的内容?

1 个答案:

答案 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美分。