将活动目录组与Windows身份验证aspnet mvc 3集成

时间:2012-09-24 12:56:09

标签: asp.net-mvc active-directory iis-7.5 windows-authentication windows-server-2008-r2

我在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 Impersation。 我正在尝试与我的用户访问该应用程序(我是EUsers的成员),但它总是提示我的用户和密码。我忘记了什么吗?我做错了吗?

2 个答案:

答案 0 :(得分:3)

  

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

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

[Authorize(Roles = "EUsers")]

答案 1 :(得分:1)

我在评论部分看到它仍然无效。我相信这可能是因为“拒绝”被明确分配给users =“*”和权限优先规则

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

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

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

  1. 明确拒绝
  2. 明确允许
  3. 继承拒绝
  4. 继承允许