サイト内の複数のサブフォルダーに対してFormsAuthenticationを有効にする
-
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つです。