【问题标题】:In IIS6, how to provide authenticated access to static files on remote server在 IIS6 中,如何提供对远程服务器上的静态文件的身份验证访问
【发布时间】:2010-02-08 22:14:20
【问题描述】:

我们有一个 ZIP 文件库,希望在 ASP.NET 站点上可供下载。

文件位于可从外部网络场访问的 NAS 设备上。

这是我们最初的策略:

  1. 将 IIS 虚拟目录映射到路径 /zipfiles 处的共享驱动器
  2. 用户可以在给定 URL 后下载 zip 文件

但是,如果用户共享文件的链接,任何人都可以下载它们。相反,我们希望在我们的站点中使用 ASP.NET 表单身份验证来验证用户的请求,然后再开始文件传输。

几个问题: 对 zip 文件的请求由 IIS 而非 ASP.NET 处理。所以它不受表单身份验证的约束。 此外,我们不希望 ASP.NET 处理该请求,因为它占用了 ASP.NET 线程并且无法扩展以下载大文件。因此,配置 asp.net dll 来处理 *.zip 请求不是一种选择。

对此有何想法?

我们折腾的一个想法是: 初始下载请求将针对 ashx 处理程序。此处理程序将在身份验证后生成一个下载令牌,该令牌保存到数据库中。然后,用户被重定向到在 QueryString 中附加了令牌的文件(例如 /files/xyz.zip?token=123456789)。 ISAPI 插件将用于检查令牌。此外,令牌将在 x 时间后过期。 对此有什么想法吗?我还没有实现 ISAPI 插件,所以我不确定这是否可行。

我想避免自定义编码,因为安全是一个问题,我更愿意使用经过时间考验的解决方案。

【问题讨论】:

    标签: iis authentication iis-6 forms-authentication isapi


    【解决方案1】:

    没有 ASP.NET 就无法进行表单身份验证。

    如果您根本不想使用 ASP.NET,您可以在文件上定义 NTFS 权限并为您的用户创建域帐户。这将很快成为一场噩梦。

    要处理大量下载到 ASP.NET,您可以查看Comet。这基本上是一个IHttpHandler,但您需要使用另一个线程池(不是 ASP.NET)。我建议看看Smart Thread Pool

    几个月前我将两者结合起来创建了一个下载速度限制应用程序,现在运行非常流畅。

    【讨论】:

    • 是的,NTFS 权限对我来说是不可能的。您的解决方案是否提供经过身份验证的访问?
    • 是的;当我收到?FileId= 时,我会转到数据库,检查用户是否可以下载并开始下载
    • Rubens,我对 COMET 和 Smart Thread Pool 完全陌生 - 你有关于你的特定用例的在线示例吗?
    • 采用这种方法codeproject.com/KB/aspnet/CometAsync.aspx,用 SmartThreadPool 替换其 ThreadPool 实现
    【解决方案2】:

    我阅读并理解您对使用处理程序管理静态文件的担忧,但如果您使用异步处理程序,则不会阻塞。

    我认为您可能会以合理的价格获得所需的结果。

    【讨论】:

      猜你喜欢
      • 2021-05-31
      • 2021-12-20
      • 2018-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多