我正在开发一个在 IIS7 (Server '08) 上运行的 ASP.NET 3.5 应用程序,使用标准的 MS Forms 身份验证和 SqlRolesProvider。 (我使用了 aspnet_regsql 工具来生成表格)。
我们有三个角色:SysAdmins、AppAdmins 和 Users。所有用户都在 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 部分。非常感谢任何帮助使此配置正常工作的帮助。
更新
从
最佳答案
即使在 IIS7 集成管道模式下,我也成功地使用了旧的 IIS6 风格的授权 block 。请尝试下面的代码,其中包括以下更改:
- 添加了
到第一个授权 block - 调换位置特定授权 block 中
和 的顺序 - 删除了
位置特定的授权 block - 为了允许 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>
关于iis-7 - ASP.NET 3.5 IIS7 角色安全实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1461132/