0

我在我的 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>
4

1 回答 1

0

你的配置没有问题。相反,静态文件(jpg、csses、pdf)由 iis 处理,而不涉及 asp.net 管道。这意味着当您请求 pdf 文件时,您的授权规则将被忽略。

要解决此问题,您可以拥有一个 aspx 页面,该页面获取一个参数,说明应该下载哪个文件,或者配置应用程序以通过 asp.net 管道运行一些(或所有)静态文件。让所有请求都通过 asplnet的最简单方法是设置

runAllManagedModulesForAllRequests="true" 

在 web.config 的模块部分。

于 2013-10-24T21:29:36.583 回答