【发布时间】:2025-12-15 12:00:02
【问题描述】:
考虑这种情况:我有一个使用 Web API 2.x 构建的 REST API,身份验证由 ASP.NET Identity 管理。用户可以上传附件作为记录的一部分,这些附件都存储在磁盘上的根文件夹中,位于名为Attachments 的目录下。
现在用户可以从他们的记录中生成 PDF。 PDF 包含指向附件文件的链接,当您单击它们时,会愉快地提供静态文件。例如:attachments/2018/01/somefile.jpeg。
我需要做的是将这些媒体文件仅提供给授权用户。基本身份验证还不够,我不能只说为所有登录用户提供媒体文件。我需要查询数据库,检查用户分配和/或其他安全措施,并决定是否应该提供文件。
我一直在寻找可行的解决方案。如何通过 Web API 处理此类路由并仅向授权用户提供静态内容?值得一提的是,我的项目中没有使用 ASP.NET MVC。它只是带有用 TypeScript 编写的 Angular 1.6 应用程序的 Web API 2.x。
【问题讨论】:
-
为了清楚起见:您使用的是 Authentication and Authorization 吗?使用来自AuthorizeAttribute Class 的属性?
-
是的,我使用 Bearer 令牌进行身份验证,这是 Identity 中的默认实现。控制器和操作受到 Authorize 属性和角色的保护。
-
这是一个类似问题的答案How do I protect static files... 这能解决您的问题吗?如果不是,您的问题和链接的问题有什么区别?
-
感谢@JQuale。我会研究一下,我已经能够通过引入一个带有路由前缀(即“附件”)的新控制器来捕获请求。但似乎该请求与其他 OWIN 请求不同。没有当前用户或身份可供检查。它们只是空的。这是永远的..
-
在这种没有当前用户的情况下,将附件文件夹上的安全设置设置为不允许匿名用户是否有意义?就像通过右键单击附件文件夹并在安全选项卡上设置权限一样。这样就需要经过身份验证的用户才能读取、写入等,或通过弹出用户名和密码强制用户身份验证
标签: asp.net security iis asp.net-web-api2 asp.net-web-api-routing