2009-03-29 3 views
23

У меня сложилась ситуация с большим внутренним корпоративным веб-приложением, работающим на ASP.NET 3.5 на IIS6, генерирующим 401 «Несанкционированные» ответы, а затем ответы 200 «Ок» (профилированный Fiddler). Я знаю, почему это происходит (встроенный auth заставляет браузер повторно отправлять учетные данные), но я ищу некоторые мысли о том, как свести к минимуму или устранить ситуацию. Приложение, о котором идет речь, работает в WAN, а некоторые пользователи испытывают латентность до 250 мс, поэтому принудительное выполнение последующего запроса может оказать заметное влияние на время загрузки страницы, особенно когда на страницах создается несколько каскадных выпадающих списков.Искоренение ответов 401 «Несанкционированный», за которыми следуют ответы 200 «Ок»

Пользователи приложения являются внутренними в среде управляемого рабочего стола, поэтому механизмы, позволяющие браузеру отправлять учетные данные по первому запросу (возможно, это возможно?), Могут быть возможны с точки зрения развертывания. Это будет работать для страниц, требующих идентификатора пользователя, но для ресурсов, не требующих проверки подлинности (WebResource.axd, ScriptResource.axd и некоторых пользовательских веб-сервисов), что позволит анонимный auth. Я рассмотрел определение этого на основе каждого местоположения в web.config, но результаты были неоднозначными (все еще количество ответов 401).

Я был бы признателен за любые рекомендации по «передовой практике» для решения этой проблемы. Есть много ресурсов, идентифицирующих проблему, но ничто из того, что я нашел, не предоставил приемлемого решения.

Спасибо!

Редактировать: ресурсы, не требующие аутентификации (т. Е. Веб-службы, используемые для каскадных выпадающих списков), могут запрашиваться анонимно путем добавления записи местоположения в веб-конфигурацию, но я еще не нашел ответ для аутентифицированных ресурсов.

+0

Какой браузер они используют? Большинство браузеров всегда отправляют базовые учетные данные для аутентификации. Ответ, вероятно, зависит от браузера. – recursive

+0

Браузер IE6 с некоторыми пользователями теперь переносится в IE7. –

ответ

15

К сожалению, это артефакт HTTP NTLM authentication scheme.

Вкратце, браузер (Internet Explorer или иное) не знает, что ему необходимо полностью аутентифицироваться до тех пор, пока он не будет отскакиваться с ответом 401, содержащим ответный заголовок WWW-Authenticate.

В случае WWW-Authenticate: NTLM - достаточно раздражающе - это требует два 401 ответов на одной постоянной связи для завершения, и этот процесс должен быть повторен после того, как HTTP, постоянное соединение закрывается. Поэтому, даже если вы смогли заставить браузер инициировать запрос вслепую попытку NTLM, по крайней мере один ответ 401 не может быть удален из транзакции.

Я думаю, что ваша лучшая ставка будет заключаться в том, чтобы максимизировать время, в течение которого постоянные соединения остаются открытыми при простоях.

+0

Проверьте настройки IIS. http://msdn.microsoft.com/en-us/library/aa347472.aspx Вы можете играть с этими настройками, чтобы уменьшить количество запросов 401. Будьте осторожны, но о ваших вариантах. AuthPersistNonNTLM, authPersistSingleRequest – batspy

0

Я считаю, что вы можете убедить Firefox автоматически отправлять учетные данные NTLM в белый список доменов через настройки «about: config» - использовать параметр «network.automatic-ntlm-auth.trusted-uris». Я сам не пробовал это. Я не уверен, что есть эквивалент для Internet Explorer.

К сожалению, если вы используете что-то другое, как Kerberos там, кажется, не быть способ избежать 401.

+0

Спасибо BRH, к сожалению, зависимость от IE6 и 7. –

+2

Настройка 'network.automatic-ntlm-auth.trusted-uris', как вы описали, позволяет Firefox аутентифицироваться, не запрашивая у пользователя учетные данные домена, но это не решить «проблему» модели 401-401-200. Это часть проверки подлинности NTLM и всегда будет выполняться независимо от настроек браузера. – hmqcnoesy

0

Возможно, вам потребуется рассмотреть проверку подлинности с использованием форм, если задержка с задержкой 401 слишком велика. Пользователям придется явно входить в систему, но только один раз. Затем вы можете использовать cookie или cookieless схему и получить ответ с первой попытки.

Я предполагаю, что загрузка страницы будет медленной, если у вас есть каскадные выпадающие списки, и ваша начальная загрузка страницы заполняет одно значение, которое заставляет POST получать следующий список, устанавливать это значение, другой POST, чтобы снова получить следующий список, и так далее.Если это так, возможно, вам нужно заполнить все эти выпадающие списки в первом раунде, а не ждать ответов POST.

3

cscript.exe C: \ Inetpub \ AdminScripts \ ADSUTIL.VBS SET W3SVC/AuthPersistSingleRequest FALSE

будет значительно сократить количество 401-х.

Смежные вопросы