1

我在 mvc 3 应用程序中使用 Windows 身份验证,我只想让我的活动目录中的一些组访问这个应用程序。我没有在我的控制器中使用 [Authorize] 属性,只是我的 web.config 配置。

这就是我设置 web.config 的方式:

  <system.web>
    <authentication mode="Windows" />
    <authorization>
    <allow roles="EUsers" />
        <deny users="*" />
    </authorization>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true" />
    <security>
        <authorization>
            <add accessType="Allow" roles="EUsers" />
            <add accessType="Deny" users="*" />
        </authorization>
    </security>
  </system.webServer>

我还在我的 IIS 授权部分启用了 Windows 身份验证和 ASP.NET 模拟。我正在尝试使用我的用户(并且我是 EUUsers 的成员)访问该应用程序,但它总是提示我输入用户名和密码。我是不是忘记了什么?难道我做错了什么?

4

2 回答 2

3

我没有在我的控制器中使用 [Authorize] 属性,只是我的 web.config 配置。

那简直是错误的。在 ASp.NET MVC 应用程序中,您不应使用 web.config 来控制授权。您应该使用该[Authorize]属性。所以:

[Authorize(Roles = "EUsers")]
于 2012-09-24T13:00:34.003 回答
1

我在评论部分看到它仍然无法正常工作。我相信这可能是“拒绝”被明确分配给用户=“*”和权限优先规则的结果

以下是解决权限冲突的一些规则:

“拒绝”权限通常优先于“允许”权限。直接应用于对象的权限(显式权限)优先于从父级(例如从组)继承的权限。从近亲继承的权限优先于从远亲继承的权限。因此,从对象的父文件夹继承的权限优先于从对象的“祖父”文件夹继承的权限,依此类推。来自同一级别的不同用户组的权限(直接设置或继承,以及“拒绝”或“允许”)是累积的。因此,如果用户是两个组的成员,其中一个具有“读取”的“允许”权限,另一个具有“允许” “Write”,用户将同时拥有读和写权限——当然,这取决于上面的其他规则。尽管拒绝权限通常优先于允许权限,但情况并非总是如此。明确的“允许”权限可以优先于继承的“拒绝”权限。

权限的优先级层次结构可以总结如下,列表顶部列出了更高优先级的权限:

  1. 明确拒绝
  2. 显式允许
  3. 继承拒绝
  4. 继承允许
于 2013-09-30T18:27:23.233 回答