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 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中的一个事件中(请求是否已针对会话进行身份验证,如果不重定向到登录表单。由于您正在执行传递,以防它已经通过身份验证,因此您也不应该有断开的链接。