我正在试验 IIS7 中静态内容的集成身份验证模式。我按照本文中的说明进行操作:https://web.archive.org/web/20210612113955/https://aspnet.4guysfromrolla.com/articles/122408-1.aspx 如果我通过登录状态允许/拒绝访问(如文章中所述),它工作正常。但是我想允许/拒绝基于角色的访问(使用角色提供程序中内置的 ASP.NET)。当我在 web.config 中为角色“Admin”设置允许规则并为所有其他用户设置拒绝规则时,即使我以管理员身份登录,我也无法访问静态文件。同一文件夹包含非静态内容(aspx 页面),可以根据角色提供者信息很好地访问这些内容。
有什么想法吗?
最佳答案
尝试将以下内容添加到您的 <system.webServer> <modules>
block :
<configuration>
<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" />
<remove name="UrlAuthorization" />
<add name="UrlAuthorization" type="System.Web.Security.UrlAuthorizationModule" />
<remove name="DefaultAuthentication" />
<add name="DefaultAuthentication" type="System.Web.Security.DefaultAuthenticationModule" />
<remove name="RoleManager" />
<add name="RoleManager" type="System.Web.Security.RoleManagerModule" />
</modules>
</system.webServer>
</configuration>
RoleManager
位是关键,它不包含在我能找到的任何在线示例中。否则,用户的角色成员资格不会针对静态内容进行初始化,因此基于角色的授权将始终失败。
(免责声明:基于我对 IIS 的有限理解,我自己拼凑了这个,但它似乎有效。)
编辑(回应您的评论):抱歉,我不太了解 RoleManager 如何依赖其他模块。您可以通过查看 c:\Windows\System32\inetsrv\config\applicationHost.config
查看默认 IIS 配置(至少,那是我的 Windows Vista 机器上的过去)查看模块加载的顺序(注意默认情况下使用 managedHandler 将 RoleManager 限制为非静态内容),MSDN 涵盖了 RoleManagerModule与 System.Web.Security 中的其余模块一起命名空间,因此您可能会在那里找到所需的内容。
关于静态内容的 IIS7 集成模式中具有角色的 ASP.NET 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/991045/