【问题标题】:Authorization for Static Files in ASP.NET MVC w/ Owin使用 Owin 在 ASP.NET MVC 中授权静态文件
【发布时间】:2014-11-24 10:07:33
【问题描述】:

我需要保护整个静态 HTML 文件文件夹。目的是用户无法访问这些文件,除非他们经过身份验证并具有必要的角色。

我们已经使用 OWIN 设置了基于 cookie 的身份验证,但无论我尝试什么,我似乎都无法找出正确的更改组合以要求对文件夹进行身份验证。

第一个问题是 IIS 完全跳过了 ASP.NET,只提供文件。我认为可能有一种方法可以将 runAllManagedModulesForAllRequests 设置为 true。但是我该去哪里呢?

我尝试在 Web.config 中填充元素以要求正确的角色,但这只会导致每个请求都被拒绝(可能是因为它没有检查正确的 cookie 或其他内容)。

我花了一整天的时间在这上面,我快要疯了。

有人解决了这个问题吗?

【问题讨论】:

  • 创建一个实现IHttpHandler 的类,并将您的安全性放在那里。见*.com/q/1146652
  • 在那种情况下,我会将我的角色检查等放入 RouteHandler?我不是很肯定,但这似乎不是适合这类事情的地方。
  • 然后从标准控制器方法提供文件。这可能就是我会这样做的方式。您可以使用任何您想要的安全性预先加载它,MVC 之神会很满意。
  • 正如@RobertHarvey 所说,使用控制器作为静态内容的看门人没有问题。这是我之前给出的 SO 答案,详细说明了我们如何对静态文件执行授权/身份验证 - *.com/questions/7208120/…

标签: asp.net asp.net-mvc authorization owin static-files


【解决方案1】:
  1. IIS 正在提供静态文件,如果你想停止,你可以删除默认的静态文件处理程序,而不是每个请求 由 MVC/OWIN 提供服务。
  2. 比在您的控制器中进行静态文件处理和授权 : 监听/映射静态文件所在的路由

要删除默认静态文件处理程序,请将其添加到 web.config 文件:

<configuration>
    <system.webServer>
        <handlers>
           <remove name="StaticFile" />
        </handlers>
    </system.webServer>
</configuration>

【讨论】:

  • 如何让它与 Angular 一起工作?我的网络应用是用 Angular 1.6 和 Typescript 编写的。如果我删除了 StaticFile 模块,则不会提供 index.html 并且会搞砸一切。我只需要限制对 attachments 文件夹的访问,并且只允许授权用户访问服务器静态/媒体文件。有什么想法吗?
  • 看看,这可能对你有帮助*.com/a/11258217/715224
  • 你是朋友!非常感谢,让我看看并试一试。非常感谢。