フォーム認証を使用して 1 種類のユーザーを認証するアプリケーションがあります。このアプリケーションには、データベース内の別のテーブルを使用して別のタイプのユーザーを認証する必要があるセクションがあります。この問題は、2 番目のタイプのユーザーのセッションがタイムアウトした場合に発生します。ユーザーは、2 番目のタイプのユーザーのログイン ページではなく、メインの Web.Config のフォーム認証セクションで定義されたログイン ページに移動します。この問題の解決策を探しています。1 つのアイデアは、セクションの IIS でアプリケーションを作成し、フォルダーの Web.Config を作成して、別のフォーム認証セクションを追加することです。私の実験では、これはうまくいかないようです。明らかな何かが欠けていますか?洞察はありますか?
5 に答える
IIRC、認証はフォルダーごとに機能します。したがって、2 番目のタイプの認証を必要とするすべてのページが、独自の構成を持つ特定のサブフォルダーにある場合は、それを実行できるはずです。
ただし、これについて 100% 確信があるわけではないので、より知識のある人が私に反論できる場合は、応答を削除します。
構文について再確認する必要があるかもしれませんが、最上位の web.config には任意の数のタグを含めることができます。
<location>...</location>
内部では、必要なフォルダー/ファイルに個別の構成パラメーターを指定できます。ここを参照してください。
編集: 申し訳ありませんが、コードを適切にフォーマットするのを怠りました
<location> タグ内に <authentication> セクションを含めることはできないため、サブフォルダーを独自の IIS (および ASP.NET) アプリケーションとして設定する必要があります。したがって、サブセクションを単独で実行できるはずです。
500.19 は「web.config を読み取れない、または解析できない」というエラーだと思います。詳細はありますか? それらを表示するには、リモート エラーを有効にする (またはイベント ビューアをチェックする) 必要がある場合があります。問題が解決しない場合は、web.config のスニペットを投稿してください。
余談ですが、私は入れ子になったアプリのファンではありませんでした。おそらく、通常の Login.aspx ページで MemberOf として処理するか、SpecialUserLogin.aspx などにリダイレクトすることをお勧めします。入れ子になったアプリは、IME をセットアップしてテストするための PITA です (たとえば、Cassini で動作させることさえできないと思いますが、2 つの別々のプロジェクトを実行して、デプロイ時に組み合わせることができます)。
はい、できます。Web.config ファイルには、オーバーライド機能を備えたツリー状の継承アーキテクチャがあります。つまり、そこに web.config ファイルを配置し、別の構成設定を指定することで、サブフォルダー内の設定を変更できます。
私がこの問題を理解している方法は、2 つの解決策があり、1 つ目は役割を調べることであり、プロバイダー モデル全体から始めるのが最適です。それ以外の場合は、アプリケーションを 2 つの部分に分割し、2 番目のユーザー タイプ領域を分割してから、仮想ディレクトリを介してメイン プロジェクトに戻すことをお勧めします。仮想ディレクトリは親ディレクトリ web.config からアクセス許可を継承することに注意してください。そのため、<Location>
タグを使用して仮想ディレクトリの認証を削除し、仮想ディレクトリ web.config 内で新しいフォーム認証を定義する必要があります。これは、フォーム認証で Windows 認証 (NTLM) が必要な場合にうまく機能します。