Пользовательские обычную проверку подлинности не удается, в 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 ответа:
Я понял это. Проблема заключалась в том, что я назвал этот модуль "BasicAuthenticationModule", который конфликтовал с другим модулем, встроенным в IIS. После того, как я переименовал модуль, все работало просто отлично!