IIS / ASP / 静态内容:通过防护限制对目录内容的访问

本文关键字:访问 静态 ASP IIS | 更新日期: 2023-09-27 18:32:36

我正在寻找有关使用 IIS6、ASP.NET 网站(SiteA、FW 2.0(和具有静态内容的网站(SiteB(的访问限制的解决方案:

问题/前提条件:

  • 通过 SiteA 身份验证的用户应该能够访问静态网站B的内容
  • SiteB 的未经身份验证的访问应该是已重定向至SiteA的登录脚本
  • 因为SiteA是遗留代码,所以不使用任何 ASP。NET 的身份验证机制。有一个检查身份验证的方法IsAuthenticated() = true/false站点 A 的状态。
  • 我仍然可以自由地将SiteB放置在任何地方(取决于在解决方案上(:在SiteA的目录结构中或其他地方,也许在另一台服务器上

考虑的解决方案/它如何工作:

  • 站点 B 放置在站点 A 目录结构中(例如 SiteA-Root/subfolder/SiteB-Root (
  • IIS 应截获对目录的请求SiteA-Root/subfolder/SiteB-Root
  • IIS 允许访问(如果IsAuthenticated == true每个请求要SiteA-Root/subfolder/SiteB-Root
  • IIS 重定向到站点 A 的登录页面,否则

我试过什么:

  • 使用 IIS-Url重写并将对站点 B 的任何请求重定向到保护脚本,例如 SiteA/Interceptor.aspx?referer=<Url of requested content of SiteB>
  • Interceptor.aspx加载<Url of requested content of SiteB>如果IsAuthenticated() == true或重定向到登录页面,否则重定向到登录页面
  • Interceptor.aspx将加载的流写入它自己的响应
  • 问题:
    • 加载的 SiteB 页面中的任何相对链接都不再有效 ->需要解析(?
    • 繁重的处理,因为对 SiteB 的任何请求都由 Interceptor.aspx 处理

任何建议将不胜感激。谢谢。

IIS / ASP / 静态内容:通过防护限制对目录内容的访问

IIS 6.0(或 IIS7.0 之前的任何内容(的问题在于,它不支持通过 ASP.NET 生命周期请求静态内容。因此,您无法访问 Global.asax 中定义的事件和其他 ASP.NET 功能,例如身份验证/授权。

但我想有一种方法可以覆盖这种行为,如这篇文章所述:http://www.devtoolshed.com/globalasax-events-iis-6-and-iis-7-static-resources

因此,一旦您将其配置为在 ASP.NET 生命周期中传递请求,是否无法在其中一个适当的 Global.asax 事件中捕获请求,然后设置此请求已经过身份验证的会话值?您也可以使用正确的表单身份验证。

因此,如果请求静态内容(这是SiteA本身子文件夹的一部分(,则只需检查(在Global.asax中的一个事件中(请求是否已针对会话进行身份验证,如果不重定向到登录表单。由于您正在执行传递,以防它已经通过身份验证,因此您也不应该有断开的链接。