過去 2 日間、これを試してきました。何が問題なのかわかりません。Web を検索しましたが、解決策は見つかりませんでした。IIS のすべての設定 (「ネゴシエートを下に移動、その他の認証を無効にする」など) を試しましたが、機能しません。私の問題は次のとおりです。ASP.NET でイントラネット Web アプリケーションを使用しており、Active Directory に保存されているユーザー名とパスワードを使用しています。アプリケーションには 5 つの異なるページがあります。すべてのページは、web.config ファイルとともに別のフォルダーに保存されています。これらの web.config ファイルには、次のようにそのページを表示できるユーザーの名前が含まれています。
<authorization>
<allow users="Domainname\username"/>
</authorization>
上記のリストに含まれていないユーザーを適切なメッセージを含む他のエラーページにリダイレクトしたい。私はこれを使用しました
protected void Application_EndRequest(object sender, EventArgs e)
{
if (HttpContext.Current.Response.Status.StartsWith("401"))
{
HttpContext.Current.Response.ClearContent();
Response.Redirect("~/myerrorpage.aspx?myerrormsg=you are not allowed");
}
}
これはローカルホストでは動作しますが、アプリケーションを IIS に配置すると、承認されたユーザー (リストに含まれているユーザー) もすべてエラー メッセージ ページにリダイレクトされます。
IIS の外部では、正常に動作しています。ただし、権限のないユーザーをエラー メッセージ ページにリダイレクトできません。IIS のエラー ページ設定も試しましたが、同じ問題が発生します。
これを修正するにはどうすればいいか教えてください。他に方法はあるでしょうか?
答え1
これがあなたの特定のケースで問題となるかどうかはわかりませんが、一般的にプロセスは次のとおりです。
- ブラウザが接続を試みる匿名初回接続時
- Web サーバーは「申し訳ありませんが、それはできません。エラー 401 です。ユーザーを認証する方法は次のとおりです」と表示します。
- ブラウザは認証を整理します(たとえば、ユーザーに資格情報を要求する)
- ブラウザは認証ヘッダー情報を含めた2番目のリクエストを送信します。
私の推測では、ユーザーが資格情報を入力する前に最初の 401 をキャッチすることで、ステップ (1) で失敗していると思われます。これは、F12 ツールまたは Fiddler などのツールで確認できます。
答え2
Windows認証を使用している場合は、次の点に注意してください。IISでWindows認証を手動で有効にする場合は、web.configに以下のコードを含めないでください。
<authentication mode="Windows" />
これを使用すると、上記の質問で述べたのと同じ問題が発生します。