我在Win8 / VS2012计算机上开发了一个ASP.NET 2.0 Web应用程序(但使用的是.NET2.0而不是4.0)。我想保护直接访问许多文件夹,例如使用表单身份验证存储在Content / Documents文件夹中的特定角色的PDF文件。它可以在我的开发机器上使用下面的web.config文件,如果我直接输入PDF的URL,我会被重定向到登录页面。
但是,在将整个解决方案复制到生产服务器(Windows Server 2003R2 sp1,安装了.NET 2和4)时,可以直接访问这些文件,似乎表单身份验证不起作用。
如何在服务器上进行调查? 我的配置有什么问题?
注意:角色是在登录时分配的,没有角色提供者(如互联网和stackoverflow上的许多文章所示),我想我的确是正确的,因为它适用于我的开发机器。
注意2:我注意到一个奇怪的事情是在win2003R2服务器上的IIS管理工具中,配置窗口与我在web.config文件中的内容不一致。当我右键单击IIS管理器中的Web应用程序属性时,转到ASP.NET选项卡,转到编辑配置并转到不同位置的授权选项卡,看起来它只显示允许*,而配置文件明显具有拒绝*。是否有可能在该服务器上不支持此类配置文件(但它不会产生任何错误)。
提前谢谢
维姆
<?xml version="1.0"?>
<!--
Note: As an alternative to hand editing this file you can use the
web admin tool to configure settings for your application. Use
the Website->Asp.Net Configuration option in Visual Studio.
A full list of settings and comments can be found in
machine.config.comments usually located in
\Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<connectionStrings>
<add name="..." connectionString="..."
providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<httpRuntime maxRequestLength="102400" executionTimeout="600"/>
<authentication mode="Forms">
<forms name="MYWEBAPP.ASPXAUTH"
loginUrl="member_login.aspx"
protection="All"
path="/"/>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
<customErrors mode="Off"></customErrors>
<compilation debug="true"/>
</system.web>
<location path="Content/Documents">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Content/Events">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Content/News">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Content/PriceChange">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Administrator">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
<location path="Member">
<system.web>
<authorization>
<allow roles="MEMBER,ADMINISTRATOR"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
</configuration>
答案 0 :(得分:0)
您的配置没有任何问题。相反,静态文件(jpgs,csses,pdfs)由iis 处理,而涉及asp.net管道。这意味着当您要求提供pdf文件时,您的授权规则将被忽略。
要解决此问题,您可以拥有一个aspx页面,该页面获取一个参数,指出应该下载哪个文件,或者配置应用程序以通过asp.net管道运行一些(或所有)静态文件。让所有请求通过asplnet的最简单方法是设置
runAllManagedModulesForAllRequests="true"
在web.config的模块部分。