NTLM-аутентификация не проходит, но обычная аутентификация работает

Вот что происходит на локальном сервере, когда приложение вызывает HTTP-запрос на локальном IIS.

    request.Credentials = CredentialCache.DefaultNetworkCredentials;
    request.PreAuthenticate = true;
    request.KeepAlive = true;

Когда я выполняю запрос, я вижу следующую серию HTTP-вызовов в Fiddler:

  1. Запрос без заголовка авторизации, результат 401 с WWW-Authenticate NTLM+Negotiate
  2. Запрос с авторизацией: согласование (Base64 строка 1), в результате 401 с WWW-Authenticate: согласование (Base64 строка 2)
  3. Запрос с авторизацией: согласование (строка 3 Base64), в результате 401 с WWW-Authenticate: согласование (строка 4 Base64)
  4. Запрос с авторизацией: согласование (Base64 строка 3), в результате 401 с WWW-Authenticate NTLM + согласование

По-видимому, клиент и сервер (оба работают на одной машине) пытаются квитировать рукопожатие, но в итоге авторизация завершается неудачно.

Странно то, что если я отключаю Windows-аутентификацию сайта и включаю обычную аутентификацию и явно отправляю user/pwd, все это работает. Это также работает, если я использую проверку подлинности NTLM и пытаюсь получить доступ к сайту из браузера, указав свои учетные данные.

1 ответ

Ну, после нескольких часов борьбы я понял, в чем проблема. Чтобы иметь возможность проверять сетевой трафик в Fiddler, я определил правило Fiddler:

if (oSession.HostnameIs ("MYAPP")) {oSession.host = "127.0.0.1"; }

Затем я использовал "MYAPP" вместо "localhost" в ссылке на веб-приложение, и Fiddler с радостью отобразил всю информацию о сеансе.

Но безопасность сервера была гораздо менее удачной, поэтому этот псевдоним в основном нарушил аутентификацию по запросу-ответу на локальном сервере. Как только я заменил псевдоним на localhost, все заработало.

Другие вопросы по тегам