【问题标题】:IIS / ASP / Static content: restrict access to directory content with guardIIS / ASP / 静态内容:使用守卫限制对目录内容的访问
【发布时间】:2013-09-24 08:29:11
【问题描述】:

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

问题/前提条件:

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

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

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

我已经尝试过的:

  • 使用 IIS-UrlRewrite 并将对 SiteB 的任何请求重定向到保护脚本,例如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 处理

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

【问题讨论】:

  • 如果静态内容是问题,请将其设置为 Web 应用程序中的虚拟目录。

标签: c# asp.net authorization iis-6


【解决方案1】:

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 事件之一中捕获请求,然后设置此请求的 Session 值是否已通过身份验证?您也可以使用正确的表单身份验证。

因此,如果对静态内容(它是 SiteA 本身的子文件夹的一部分)发出请求,那么您必须检查(在 Global.asax 中的一个事件中)该请求是否已通过身份验证会话,如果没有重定向到登录表单。由于您正在进行传递以防万一它已经过身份验证,因此您也不应该有损坏的链接。

【讨论】:

  • 这并不能解决整个问题,但为我指明了正确的方向。
  • 如果您能在解决问题后分享您的见解,那就太好了。我还打算根据我对问题的理解为您指出正确的方向。谢谢
猜你喜欢
  • 1970-01-01
  • 2012-12-22
  • 1970-01-01
  • 2017-09-25
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2022-08-16
  • 2021-08-01
相关资源
最近更新 更多