我在我的 Win8/VS2012 机器上开发了一个 ASP.NET 2.0 Web 应用程序(但使用的是 .NET2.0 而不是 4.0)。我想保护对许多文件夹的直接访问,例如,使用表单身份验证存储在 Content/Documents 文件夹中的特定角色的 PDF 文件。它适用于我的开发机器上的以下 web.config 文件,如果我直接输入 PDF 的 URL,我会被重定向到登录页面。
但是,当将整个解决方案复制到生产服务器(Windows 服务器 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>