我有一个 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?
请提出一些解决方案。
感谢。
答案 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>