Двойные запросы для страниц aspx, запрос проверки подлинности NTLM не выполняется - PullRequest
1 голос
/ 27 марта 2012

У меня есть следующая конфигурация:

  • IIS 7,5
  • Веб-сайт A - Аутентификация: все опции отключены, только окна аутентификация включена.
  • Приложение B (как суб-веб-приложение A): Аутентификация: Анонимный включен, Базовый включен, Windows аутентификация отключена.

Оба приложения работают под управлением ASP.NET 4, отдельные пулы приложений, классический режим.

Теперь приложение B имеет такое странное поведение, которое я заметил в Fiddler. Для каждого запроса страницы aspx отображаются две записи: Первый запрос:

GET https://example.com/page.aspx HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://example.com/
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7)
Cookie: ASP.NET_SessionId=123456789
Accept-Encoding: gzip, deflate
Host: example.com
Authorization: NTLM DFGHJKLDRFGHNXAAAAA==
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: 0

В ответ я получаю 401. Затем для того же ресурса делается второй запрос:

GET https://example.com/page.aspx HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://example.com/
Accept-Language: en-GB
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; Zune 4.7)
Authorization: Basic ZXVyasdasdasdasdasdasd=
Accept-Encoding: gzip, deflate
Host: example.com
Connection: Keep-Alive
Cache-Control: no-cache
Content-Length: 0
Cookie: ASP.NET_SessionId=lasdasdasdasdasdasdasd

Второй в порядке со статусом 200.

Разница заключается в строке «Авторизация», первая показывает NTLM (предоставление 401 доступа запрещен), иногда вызывает неожиданное поведение javascripts, например, с панелями обновления (Sys.WebForms.PageRequestManagerParserErrorException).

Что мне не хватает? Как настроить IIS (или веб-приложение), чтобы не выполнять этот первый запрос «NTLM»? Спасибо за вашу помощь.

Редактировать: еще одна интересная проблема, которую я заметил: в той же среде у меня есть второй набор этих приложений (только связанный с другой базой данных). В этом наборе для приложения A включена анонимная аутентификация, включены формы и отключены окна. Приложение B имеет те же настройки, что и в первом наборе. В этом случае нет неудавшихся запросов (401). Все работает гладко.

1 Ответ

1 голос
/ 29 марта 2012

Похоже, проблема решена.Поскольку сайт был добавлен как сайт интрасети в IE, и автоматический вход в зону интрасети был включен, машины корпоративного домена сначала попытались выполнить проверку подлинности NTLM.Вот откуда пришел запрос NTLM - и поскольку аутентификация Windows была отключена в IIS, он дал неправильный ответ.

...