3

ストックMSフォーム認証とSqlRolesProviderを使用して、IIS7(Server '08)で実行されているASP.NET 3.5アプリケーションに取り組んでいます。(私はaspnet_regsqlツールを使用してテーブルを生成しました)。

SysAdmins、AppAdmins、Users の 3 つの役割があります。すべてのユーザーはユーザーに属し、ユーザーは 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 セクションの両方を使用することにあると思われます。この構成を正しく機能させるための助けをいただければ幸いです。

アップデート

<location> 要素から <system.webServer> セクションを削除すると、そのフォルダー内の .aspx ページが正しく返されます。残念ながら、そのフォルダー内の .js ファイルはまだすべてのユーザーに対してブロックされています...理想的には、特権のない目から .js ファイルもロックしたいと思います。だから私はまだ助けを求めています。

4

1 に答える 1

6

IIS7 統合パイプライン モードでも、古い IIS6 スタイルの認証ブロックをうまく使用しています。次の変更を含む以下のコードを試してください。

  1. <deny users="?" を追加 /> 最初の認可ブロックへ
  2. ロケーション固有の認可ブロックで <allow> と <deny> の順序を入れ替えました
  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>
于 2009-09-22T16:39:00.567 に答える