2009-09-22 246 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