iis-7 - ASP.NET 3.5 IIS7 角色安全实现

标签 iis-7 web-config asp.net-3.5 sqlroleprovider

我正在开发一个在 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 部分。非常感谢任何帮助使此配置正常工作的帮助。

更新

元素中删除 部分可使该文件夹中的 .aspx 页面正确返回!不幸的是,该文件夹中的 .js 文件仍然被所有用户阻止......理想情况下,我也想锁定 .js 文件以防止未经授权的人看到。所以我仍在寻求帮助。

最佳答案

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

  1. 添加了 到第一个授权 block
  2. 调换位置特定授权 block 中的顺序
  3. 删除了 位置特定的授权 block
  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>

关于iis-7 - ASP.NET 3.5 IIS7 角色安全实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1461132/

相关文章:

.net - 在 ASP.NET 应用程序中存储 SMTP 凭据的最佳实践是什么?

c# - 从安装程序访问配置文件中的 'applicationSettings'(不是 'appSettings')部分

iis - 为特定域设置 URL 重写规则

visual-studio-2010 - 即时调试器在没有必要的安全权限的情况下启动

javascript - 为 ASP :NET webform button 启用或禁用 javascript 的 e.preventDefault

asp.net - 可以在不破坏网站的情况下将 MIME 类型添加到 web.config 中吗?

asp.net-mvc - 在 IIS7 集成模式下获取 NullReferenceException

asp.net - 是否可以确定 IIS7 在 ASP.NET 中运行的托管管道?

.net - 如何将大 (> 25MB) 文件上传到 Web 服务?

c# - 检查 datareader 中的记录是否为 NULL