我正在使用库存MS Forms Authentication和SqlRolesProvider在IIS7(Server '08)上运行ASP.NET 3.5应用程序。 (我使用aspnet_regsql工具生成表格。)
我们有三个角色:SysAdmins,AppAdmins和Users。所有用户都在用户中,用户可以使用SysAdmins,AppAdmins或两者。
我似乎无法获得一个Admin目录来阻止访问不在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部分。任何帮助使这种配置正常工作将不胜感激。
更新
删除&lt; system.webServer&gt;来自&lt; location&gt;的部分element使得该文件夹中的.aspx页面正确返回!不幸的是,该文件夹中的.js文件仍然被所有用户阻止...理想情况下,我想锁定.js文件以及无特权的眼睛。所以我还在寻求帮助。
答案 0 :(得分:6)
即使在IIS7集成管道模式下,我也成功使用了旧的IIS6样式的授权块。请尝试以下代码,其中包括以下更改:
请告诉我这是否适合您!
<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>