c# - [Authorize(Roles = "Administrators")] 使用 Windows 身份验证被拒绝访问

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

我有一个使用 Windows 身份验证来限制用户访问的 ASP.NET MVC 4 站点。 在 Controller 上应用[Authorize(Roles = "Administrators")]

该网站正在我的本地计算机上通过 IIS 运行。 当访问站点时(也是从我的本地计算机)访问被拒绝,即使我的用户帐户是管理员组的成员。

我试过按照这篇文章中的建议指定“BUILTIN\Administrators”:How do I make AuthorizeAttribute work with local Administrators group in ASP.NET MVC 3 intranet application? 但没有成功。

如果我创建一个像“TestGroup”这样的新组,请将我的用户帐户分配给该组并在我的 Controller 上使用[Authorize(Roles = "TestGroup")] - 然后我就可以访问 Controller 。

Administrator 组是否有一些特殊限制(可能是出于安全原因?),或者是否有其他任何可能影响 Administrator 组使用的因素?

最佳答案

通过在您当前的 ASP.NET 标识中列出声明:

(System.Web.HttpContext.Current.User.Identity
    as System.Security.Principal.WindowsIdentity)
    .Claims
    .ToArray();

您将看到管理员组 (SID : S-1-5-32-544) 有一个类型为 denyonsid 的声明。对 User.IsInRole("Administrators") 的调用将失败。

我认为,重点是当前用户永远不会真正属于管理员组,除非您关闭 UAC 和/或以管理员身份运行浏览器

我已经完成了这两件事(浏览器是在本地主机上启用了 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 美分。

关于c# - [Authorize(Roles = "Administrators")] 使用 Windows 身份验证被拒绝访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25399347/

相关文章:

c# - 清除 WebView 中的所有 cookie

c# - 如何跨 <asp :Content> placeholders? 链接 GridView 控件

c# - 获取特定扩展名的文件c#

c# - TableLayoutPanel 中的 RowStyles 和 Rows 不匹配?

c# - 以特定格式从剑道日历获取日期时间

asp.net-mvc - MVCSiteMapProvider - 最近添加的关键字,现在它们正在填充到 MenuHelper 的链接中

ASP.NET MVC 状态管理

asp.net - 如何从控制台运行 Azure 部署 PowerShell 脚本

c# - 如何使用C#在多个目录中定位一个文件

c# - CookieAuthentication cookie 在应用程序池回收后无效