カスタムの基本認証を使用して保護しようとしているいくつかの RESTful サービスを含む ASP.NET MVC アプリケーションがあります (それらは自分のデータベースに対して認証されます)。HTTPModule を作成してこれを実装しました。
HttpApplication.AuthenticateRequest イベントにアタッチされたメソッドが 1 つあります。このメソッドは、認証が失敗した場合にこのメソッドを呼び出します。
private static void RejectWith401(HttpApplication app)
{
app.Response.StatusCode = 401;
app.Response.StatusDescription = "Access Denied";
app.CompleteRequest();
}
このメソッドは HttpApplication.EndRequest イベントに添付されています。
public void OnEndRequest(object source, EventArgs eventArgs)
{
var app = (HttpApplication) source;
if (app.Response.StatusCode == 401)
{
string val = String.Format("Basic Realm=\"{0}\"", "MyCustomBasicAuthentication");
app.Response.AppendHeader("WWW-Authenticate", val);
}
}
このコードは、ブラウザーにログイン ダイアログを表示するように指示する "WWW-Authenticate" ヘッダーを追加します。Visual Studio の Web サーバーを使用してローカルでデバッグすると、これは完全に機能します。しかし、IIS7 で実行すると失敗します。
IIS7 では、組み込みの認証モジュールをすべてオフにしていますが、匿名は除きます。それでも HTTP 401 応答が返されますが、WWW-Authenticate ヘッダーが削除されているようです。
何か案は?