3

我正在试验 IIS7 中静态内容的集成身份验证模式。我按照本文中的说明进行操作:http ://aspnet.4guysfromrolla.com/articles/122408-1.aspx 如果我通过登录状态允许/拒绝访问(如文章中所示),它工作正常。但是我想允许/拒绝基于角色的访问(使用内置在角色提供程序中的 ASP.NET)。当我在 web.config 中为角色“Admin”设置允许规则并为所有其他用户设置拒绝规则时,即使我以管理员身份登录,我也无法访问静态文件。同一个文件夹包含非静态内容(aspx 页面),可以根据角色提供者信息很好地访问这些内容。

有任何想法吗?

4

2 回答 2

5

尝试将以下内容添加到您的<system.webServer> <modules>块中:

<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(至少,这是我的 Windows Vista 机器上的过去)来查看默认的 IIS 配置,以查看加载模块的顺序(注意默认使用managedHandler将 RoleManager限制为非静态内容),并且 MSDN 涵盖RoleManagerModule以及System.Web.Security命名空间中的其余模块,因此您可能会在那里找到您需要的东西。

于 2010-11-02T20:29:46.660 回答
0

我想说最可能的罪魁祸首是静态文件没有由 ASP.NET 处理,而是由 IIS 处理。

如果添加通配符脚本映射,它是否有效?

于 2009-07-09T22:34:04.233 回答