Пользовательская базовая проверка подлинности не проходит в IIS7 - PullRequest
5 голосов
/ 18 апреля 2010

У меня есть приложение 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 ]

2 голосов
/ 19 апреля 2010

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

1 голос
/ 19 апреля 2010

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

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

...