【发布时间】:2011-11-13 10:59:21
【问题描述】:
我有一个 ASP.NET MVC 3 应用程序在我的本地开发盒 (Win7) 和登台服务器 (W2k8r2) 上运行。在启用 ASP.NET Windows 授权安全之前,该应用程序在两种环境中都能正常运行。
保护网络应用程序后,它继续在临时服务器上正常运行,但在我的本地开发盒上生成 401.2 访问被拒绝。我能看到的唯一显着区别是在本地开发盒上,我通过 Visual Studio 使用 Cassini,而服务器是 IIS7.5。
正在使用 Windows 授权 + 模拟。什么可能导致 Cassini 生成这些 401.2 访问被拒绝?
Web.config 是:
<system.web>
<authentication mode="Windows" />
<identity impersonate="true" />
<!-- replication of system.webServer security settings for cassini which doesn't process them... -->
<authorization>
<allow roles=".\Test Application - Users" />
<deny users="*" />
</authorization>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" users="" roles="Test Application - Users" />
</authorization>
</security>
仅供参考,相关用户位于每个系统上的“测试应用程序 - 用户”Windows 安全组中。
解决方案
开发盒上的根本问题原来是:
- Cassini 不支持身份模拟和
- 虽然用户被添加到相关的 NT 组,但他们没有注销/登录,因此与其 Windows 令牌关联的组 SID 没有被刷新
如果 Cassini 支持模拟,我怀疑这会是一个问题,因为会在模拟上下文中建立一个新的令牌。感谢@x0n 指出正确的方向。
【问题讨论】:
-
我不完全确定,但我不认为 cassini 可以模仿(但是 iis express 可以。)
-
@x0n - 你似乎是对的。在下面发布了与您的评论相关的我自己的问题的答案
-
好吧,如果你不介意,我会把我的评论作为你可以接受的答案来骗取分数;)
标签: asp.net asp.net-mvc impersonation roleprovider