5

カスタムの基本認証を使用して保護しようとしているいくつかの 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 ヘッダーが削除されているようです。

何か案は?

4

2 に答える 2

2

私はそれを考え出した。問題は、このモジュールに「BasicAuthenticationModule」という名前を付けたことでした。これは、IIS に組み込まれている別のモジュールと競合していました。モジュールの名前を変更すると、問題なく機能しました。

于 2010-04-18T22:08:16.723 に答える
1

あなたはそれを機能させていますが、これは考慮すべき別のことです:

http://wcfrestcontrib.codeplex.com/wikipage?title=Web%20Authentication%20Overview&referringTitle=Home

于 2010-04-19T06:55:15.557 に答える