多くの人がサブフォルダー認証に関して同じ状況に直面していたので、要約を入力しました。
サブフォルダの承認
- ASP.NET は、1 つのアプリケーションに対して 1 つの認証モードのみを持つことができます。
- 異なるアプリケーション間でリソースを共有することはできません。
シナリオ
ホームページでログイン ダイアログが表示されないようにします。ユーザーがログインなしで通過できるようにする必要があります。ただし、同じアプリケーションの別のフォルダーで、おそらく別のページで、ユーザー ネットワーク ログイン ID を使用して、データベース テーブルに対するユーザー権限をチェックする必要があります。デフォルトでは、IE はホスト名のみを持つすべての Web サイトをイントラネットとして扱います。デフォルトのイントラネット設定では、Windows 認証が使用されている場合、ログイン ダイアログは表示されず、ユーザー ログインとパスワードがアプリケーションに渡されません。ただし、注意が必要なのは、アプリケーションに実際のドメインがある場合、IE はそれをインターネット サイトと見なし、Windows 認証が使用されている場合はログインとパスワードを要求することです。
Windows 認証を使用してインターネット サイトのログイン ダイアログを表示しないようにする唯一の方法は、IIS で匿名認証をオンにすることです。ただし、匿名が Windows 認証よりも優先されるため、ログイン情報をキャプチャする機能が失われます。良いニュースは、その問題を解決する方法があることです。アプリケーション サブフォルダーがログイン情報を取得する必要がある場合は、web.config の Location 要素で親認証を上書きする必要があります。
1 IIS で、認証を次のように構成します。
- 匿名認証を有効にし、
- Windows 認証を有効にする
2 Web.Config に以下を追加します。
<authentication mode="Windows" />
<authorization>
<allow users="*" />
</authorization>
<!-- secured is the relative subfolder name. deny anonymous user, so only the authenticated login will pass through -->
<location path="secured" allowOverride="true">
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</location>