Сбой пользовательской базовой аутентификации в IIS7

У меня есть приложение ASP.NET MVC с некоторыми службами RESTful, которые я пытаюсь защитить с помощью пользовательской базовой проверки подлинности (они проходят проверку подлинности в моей собственной базе данных). Я реализовал это, написав HTTPModule.

У меня есть один метод, прикрепленный к событию HttpApplication.AuthenticateRequest, который вызывает этот метод в случае сбоя аутентификации:

    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. Но это не удается, когда я запускаю его в IIS7.

Для IIS7 у меня отключены все встроенные модули аутентификации, кроме анонимных. Он по-прежнему возвращает ответ HTTP 401, но, похоже, удаляет заголовок WWW-Authenticate.

Есть идеи?


person reustmd    schedule 18.04.2010    source источник


Ответы (2)


Я понял. Проблема заключалась в том, что я назвал этот модуль «BasicAuthenticationModule», который конфликтовал с другим модулем, встроенным в IIS. Как только я переименовал модуль, все заработало отлично!

person reustmd    schedule 18.04.2010

Даже если у вас это работает, есть еще кое-что, что следует учитывать:

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

person Raj Kaimal    schedule 19.04.2010