我正在使用ASP.Net MVC。我使用ASP Forms身份验证限制访问该网站。但是,网页包含指向服务器上的pdf文件的链接,我也希望受到保护。
例如,用户可以浏览到foo.com和foo.com/account/logon。一旦他们登录,他们可以访问foo.com/category/bar,它在bar.aspx中显示视图。在该视图上是foo.com/files/theta.pdf的链接,它在浏览器中加载就好了。但是,除非用户已经过身份验证,否则我不希望从浏览器访问foo.com/files/theta.pdf。
如果没有先通过foo.com/account/logon进行身份验证,如何阻止用户直接从浏览器访问foo.com/files/theta.pdf?
答案 0 :(得分:8)
通过控制器传递请求,并返回FileResult
。您可以使用Authorize
属性或通过检查控制器方法内的权限,将所需的任何安全性应用于控制器方法。
this question有一个代码示例,说明了如何返回图像文件。只需返回您的pdf而不是图像文件,并使用application/pdf
作为MIME类型。
答案 1 :(得分:5)
如果您想限制对/files
目录的所有访问权限,只需使用location
中的web.config
元素来限制访问权限。
E.g。
<location path="~/files">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>
我应该补充一点,我同意Robert和Rob的高级安全性,但如果你只是想要一个简单的解决方案,这应该可以解决问题。 : - )
HTHS,
查尔斯
答案 2 :(得分:1)
使用FileResult,我相信它是一个内置的ActionResult。这将发回您可以获得各种授权的二进制数据:
http://msdn.microsoft.com/en-us/library/system.web.mvc.fileresult.aspx
答案 3 :(得分:0)
如果您使用的是ASP.NET Core,则可以使用Resource-based authorization
授权策略取决于所访问的资源。考虑具有作者属性的文档。只允许作者更新文档。因此,必须先从数据存储中检索文档,然后才能进行授权评估。