サイト内の複数のサブフォルダーに対してFormsAuthenticationを有効にする

StackOverflow https://stackoverflow.com/questions/821206

  •  03-07-2019
  •  | 
  •  

質問

フォーム認証をサイトに実装しようとしていますが、独自のHttpModuleを作成して独自のカスタムロジックを実行する以外に、まだ解決策を見つけることができていないシナリオでは、 d質問を投げて、これが本当に唯一の解決策であるかどうかを確認します。

カスタムメンバーシッププロバイダーの上でformsAuthenticationを使用したいのですが、フォルダーごとに異なるプロバイダーを使用したいです。私たちのサイトはこれらのセクションをサブフォルダー(例:〜/ Admin、〜/ GoldCustomer、〜/ SilverCustomer、〜/ BronzeCustomer)で分割しているため、セクション/サブフォルダーごとに異なるメンバーシッププロバイダーを使用したいと思います。これをサポートするフレームワークを使用して、次のようにweb.configを実装します。

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

これを行うと、実行時エラーが発生します:

allowDefinition = 'MachineToApplication'としてアプリケーションレベルを超えて登録されたセクションを使用するとエラーになります。このエラーは、IISで仮想ディレクトリがアプリケーションとして構成されていないために発生する可能性があります。

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

私たちが試みていることを達成する唯一の方法は、カスタムHttpModuleを使用するか、アプローチを変更することです(IISでフォルダーを別のWebアプリに分割するなど)。これは正しいですか、何か不足していますか?または、私が気付いていない他の選択肢はありますか?

ご協力ありがとうございます!

役に立ちましたか?

解決

まず、データベースを制御できるのであれば、ロールベースのセキュリティはアプリケーションに最適です。しかし、あなたがそれを変更できないなら、それは禁止です。

代替ソリューションは、ReturnUrlクエリ文字列変数に基づいてユーザーをフォルダー固有のログインフォームにリダイレクトするゲートウェイログインフォームで、そのフォームはユーザーの検証に必要なプロバイダーを使用します。次に、FormsAuthentication.RedirectFromLoginPageを使用して認証Cookieを設定し、前のページにリダイレクトします。ロールを設定し、ロールベースのセキュリティを使用して、<authorization>web.configタグで各フォルダーへのアクセスを制御できます。

他のヒント

あなたが何をしようとしているのかわかりませんが、これらの各顧客タイプの役割はどうですか?サブフォルダーごとに役割ごとにアクセスを制限しますが、メンバーシッププロバイダーは1つと役割プロバイダーは1つです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top