Formsauthentication for folder在生产服务器上不起作用

时间:2013-10-24 21:17:25

标签: asp.net iis

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

1 个答案:

答案 0 :(得分:0)

您的配置没有任何问题。相反,静态文件(jpgs,csses,pdfs)由iis 处理,而涉及asp.net管道。这意味着当您要求提供pdf文件时,您的授权规则将被忽略。

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

runAllManagedModulesForAllRequests="true" 

在web.config的模块部分。