Пользовательская базовая аутентификация веб-службы - PullRequest
2 голосов
/ 04 августа 2011

У меня небольшая проблема с реализацией пользовательской базовой аутентификации для asmx в .net 4.0.Я создал HttpModule, который запускает процесс аутентификации потребителя веб-сервиса, запускающего этот код,

HttpApplication application = (source as HttpApplication);
HttpContext context = application.Context;
if ( VirtualPathUtility.GetFileName(context.Request.FilePath).Contains("svcEWS.asmx"))
{
    string username = "", password = "";

    string authHeader = HttpContext.Current.Request.Headers["Authorization"];

    if (!string.IsNullOrEmpty(authHeader) && authHeader.StartsWith("Basic"))
    {
        //Authenticate here
    }
}   

Однако при достижении этого кода заголовок аутентификации отсутствует.Потребляющее веб-приложение просто вызывает,

EWS.svcEWS svcEWS = new EWS.svcEWS();
svcEWS.Credentials = new NetworkCredential("admin", "admin", "example.com");
svcEWS.HelloWorld();

IIS настроен для работы с анонимной аутентификацией на анонимную аутентификацию, чтобы предотвратить перехват любых запросов авторизации.

Что-то мне не хватает, чтобы клиент передал правильный заголовок моему модулю?

1 Ответ

2 голосов
/ 10 августа 2011

Я забыл отклонить первый запрос с кодом 401 для принудительной аутентификации. Это устраняет проблему, так как invoker повторно отправляет запрос с заголовком auth.

...