2009-09-22 206 views
3

我正在使用库存MS Forms身份验证和SqlRolesProvider在IIS7(服务器'08)上运行ASP.NET 3.5应用程序。 (我使用aspnet_regsql工具来生成表格)。ASP.NET 3.5 IIS7角色安全实施

我们有三个角色:SysAdmins,AppAdmins和Users。所有用户都在用户中,并且用户可以在SysAdmins,AppAdmins或两者中。

我似乎无法得到一个管理员目录来阻止访问不在SysAdmins和AppAdmins中的用户。它可以允许所有登录用户或无人登录。

这里是我当前的配置中的相关内容:

<configuration> 
    ... 
    <system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="/client/security/login.aspx" timeout="480" /> 
    </authentication> 
    <authorization> 
    </authorization> 
    <roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
    ... 
    </system.web> 
    <system.webServer> 
    <security> 
     <authorization> 
     <add accessType="Deny" users="?" /> 
     </authorization> 
    </security> 
    ... 
    </system.webServer> 
    <location path="admin"> 
    <system.webServer> 
     <security> 
     <authorization> 
      <remove users="*" roles="" verbs=""/> 
      <add accessType="Allow" roles="SysAdmins,AppAdmins" /> 
     </authorization> 
     </security> 
    </system.webServer> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     <allow roles="SysAdmins,AppAdmins"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

我相信这个配置目前大家块。我做了类似的配置,阻止任何人。

我怀疑问题在于同时使用system.web和system.webserver部分。任何帮助获取此配置正常工作将不胜感激。

UPDATE

从<位置>要素,使该文件夹中的.aspx页面返回正确拆卸<system.webServer>节!不幸的是,该文件夹中的.js文件仍然被所有用户阻止。理想情况下,我想锁定.js文件以及无特殊要求的眼睛。所以我仍在寻求帮助。

+0

这是同一个问题:http://stackoverflow.com/questions/991045/asp-net-authentication-with-roles-in-iis7-integrated-mode-for-static-content – Toby 2009-09-22 19:29:03

回答

6

即使在IIS7集成管道模式下,我也成功使用旧的IIS6样式的授权块。请尝试下面的代码,其中包括以下更改:

  1. 已添加<拒绝用户=“?”/>到第一授权块
  2. 交换的<顺序允许>和<否认位置特定授权块
  3. 移除<system.webServer>位置特定授权块
  4. >,以允许通过JS文件,我最好的建议是将它们移动到一个单独的文件夹,并允许匿名访问该文件夹(见下文)。或者,您可以在位置的路径属性中命名每个js文件。但是,该解决方案不易维护。

请让我知道,如果这对你有用!

<configuration> 
    <system.web> 
    <authentication mode="Forms"> 
     <forms loginUrl="/client/security/login.aspx" timeout="480" /> 
    </authentication> 
    <authorization> 
     <deny users="?"/> 
    </authorization> 
    <roleManager defaultProvider="SqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName="EquityTouch.Roles" cookieProtection="All" cookieSlidingExpiration="true" cookieTimeout="60"> 
     <providers> 
     <clear /> 
     <add name="SqlRoleProvider" applicationName="EquityTouch" connectionStringName="SQLProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> 
     </providers> 
    </roleManager> 
    </system.web> 

    <location path="admin"> 
    <system.web> 
     <authorization> 
     <allow roles="SysAdmins,AppAdmins"/> 
     <deny users="*"/>    
     </authorization> 
    </system.web> 
    </location> 
    <location path="js"> 
    <system.web> 
     <authorization> 
     <deny users="?"/> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 
+0

感谢诺亚:我猜在集成管道中角色的安全性无法正常工作。即使静态文件不受保护,使用.NET system.web部分也至少可以将rifraff留在重要的aspx页面之外。 – Toby 2009-09-23 18:55:10

+1

刚刚遇到一篇似乎表明角色受IIS 7 URL授权支持的博客文章: http://mvolo.com/blogs/serverside/archive/2009/05/11/Workaround-for-using-IIS -7-url-authorization-with-ASP.NET-roles.aspx – 2009-11-21 19:11:14

+0

我会看看Will!好找! – Toby 2010-01-25 22:38:39