Пользовательские обычную проверку подлинности не удается, в 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.

Есть идеи?

2 5

2 ответа:

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

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

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