授权&验证对静态内容的访问(pdf)

时间:2012-02-28 07:50:53

标签: asp.net security

我有一个 asp.net网络应用,可通过表单身份验证访问。文件夹结构内部如下所示: -

\myapp
\document\pdf\hello1.pdf
\document\pdf\hello2.pdf
\document\pdf\hello3.pdf
\document\pdf\hello4.pdf

http://localhost/myapp/document/pdf/hello1.pdf

现在这些pdf文件用于应用程序中的锚点链接。现在我想强制执行身份验证&授权限制对这些静态资源的直接访问。如果有应用程序外部的访问权限,则应该转到登录页面。

我无法更改锚标签中文件的路径,因为我在应用程序的许多地方使用了它。

有没有办法处理web.config?

请提出一些解决方案。

感谢。

4 个答案:

答案 0 :(得分:1)

您应该向web.config添加以下行,以限制仅对经过身份验证的用户访问“文档”文件夹。
未经身份验证的用户将根据需要自动重定向到登录页面。

<configuration>

..........
 <authentication mode="Forms">
  <forms loginUrl="Login.aspx" name="TSAuthCookie" cookieless="UseCookies" 
    timeout="60" path="/"/>
 </authentication>
 <location path="document">
  <system.web>
   <authorization>
     <deny users="?"/>
   </authorization>
  </system.web>
 </location>
</configuration>

答案 1 :(得分:1)

对于.NET 2.0 / 3.5 / 4.0和IIS6,我发现以下内容对于强制.NET处理特定文件夹中的.pdf等静态文件是必要的:

1)IIS6配置:

一个。在网站的属性中,转到“主目录”选项卡,然后单击“配置”B.双击现有的“应用程序扩展”条目(例如.ascx)并复制在“可执行文件”中找到的路径(此路径将根据使用的.NET版本而有所不同;因此复制和粘贴更容易)
C.取消添加/编辑应用程序扩展映射的对话框,然后单击“添加”以添加新扩展
D.将您在1B中复制的路径粘贴到“可执行文件”中
E.在“扩展”中输入.pdf(或其他文件扩展名)
F.根据需要选择“All verbs”或“Limit to”GET等;如果不是服务器上的物理文件,则取消选中“验证文件是否存在”
G.在所有对话框上单击“确定”

2)web.config配置:

一个。添加受限制目录或文件的位置:

<location path="your_directory">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
</location>

B中。将以下内容添加到httpHandlers部分:

<add path="*.pdf" verb="*" type="System.Web.StaticFileHandler" validate="true" />

现在.net只会将your_directory中的.pdfs提供给经过身份验证的用户(在我的情况下使用表单身份验证)。

答案 2 :(得分:0)

您可以使用location元素为文件夹设置单独的安全设置。

或者您可以将web.config文件放在文档文件夹中并在其中配置安全性。

答案 3 :(得分:0)

启用web.config  <authorization>元素影响在IIS6上启用通配符脚本映射所需的非ASP.NET文件扩展名(如果启用了经典管道模式,则适用于IIS7),或者在IIS7中使用集成管道模式。

请参阅http://ruslany.net/2008/09/wildcard-script-mapping-and-iis-7-integrated-pipeline/

然后,以下web.config条目将起作用:

 <location path="document">
  <system.web>
   <authorization>
     <deny users="?"/>
   </authorization>
  </system.web>