我在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的成员),但它总是提示我的用户和密码。我忘记了什么吗?我做错了吗?
答案 0 :(得分:3)
我的控制器中没有使用[Authorize]属性,只是我的web.config配置。
这完全是错的。在ASp.NET MVC应用程序中,您不应使用web.config来控制授权。您应该使用[Authorize]
属性。所以:
[Authorize(Roles = "EUsers")]
答案 1 :(得分:1)
我在评论部分看到它仍然无效。我相信这可能是因为“拒绝”被明确分配给users =“*”和权限优先规则
以下是解决权限冲突的一些规则:
“拒绝”权限通常优先于“允许”权限。 直接应用于对象的权限(显式权限)优先于从父级继承的权限(例如,从组中)。 从近亲属继承的权限优先于从远程前辈继承的权限。因此,从对象的父文件夹继承的权限优先于从对象的“祖父”文件夹继承的权限,依此类推。 来自同一级别的不同用户组(直接设置或继承,以及“拒绝”或“允许”)的权限是累积的。因此,如果用户是两个组的成员,其中一个组具有“允许”权限“读取”而另一个组具有“允许”“写入”,则用户将具有读写权限 - 取决于当然,上面的其他规则。 虽然拒绝权限通常优先于允许权限,但情况并非总是如此。明确的“允许”权限可以优先于继承的“拒绝”权限。
权限的优先级层次结构可以总结如下,列表顶部列出了较高的优先权: