Вопрос по http-status-code-401, ntlm, iis-6, iis – Избегайте ответа 401 на каждый запрос, используя NTLM

28

У нас есть приложение asp.net 3.5, использующее проверку подлинности Windows на основе NTLM. Система работает в частной сети, которая фактически распределена по разным географическим местам (подключенным через VPN).

Сейчас мы пытаемся оптимизировать работу веб-сайта. Поскольку работает NTLM, каждый новый запрос к IIS состоит из 3 разных запросов, а первые 2 - 401 ответа. Мы пытаемся свести к минимуму количество этих запросов только в начале сеанса. Мы нашлиэтот решение. К сожалению, это ничего не изменило, и мы продолжаем получать этот ответ 401 (который требует времени).

Чтобы увидеть трафик, я впервые использовал приложение Fiddler. Почему-то, когда я использую Fiddler, в начале сеанса происходит только 1 процесс аутентификации (именно так, как я хочу), но когда я закрываю Fiddler и проверяю трафик через WireShark, я вижу, что у меня все еще есть этот ответ 401 для каждого запроса ,

Используются клиенты IE6, IIS версии 6.

Может кто-нибудь посоветовать?

Ваш Ответ

7   ответов
4

ользовать cookie, напримерВот

+1 Я проверил это решение. это выглядит здорово. Satumba
3

По смежной теме; если вы используете IIS7.0 и аутентификацию kerberos, то, по-видимому, AuthPersistNonNTLM = true можно использовать, чтобы избежать 401 обходов для каждого запроса.

http://msdn.microsoft.com/en-us/library/aa347548(VS.90).aspx

http://blogs.technet.com/b/configurationmgr/archive/2010/06/03/solution-you-may-experience-slow-performance-when-using-bits-and-kerberos-authentication-on-configmgr- 2007-распределение-points.aspx

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

NTLM / Negotiate, в отличие от всех других схем аутентификации HTTP, являются протоколами с установлением соединения.

В IIS существуют различные параметры, которые определяют, будет ли требоваться аутентификация для всех запросов в ранее аутентифицированном соединении (например, AuthPersistSingleRequest). Я полагаю, что независимо от этого параметра IIS будет автоматически запрашивать повторную аутентификацию при выполнении запроса POST.

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

+1 за ответ от самого Эрика. Я хочу поблагодарить вас лично за создание фантастического скрипача. Это сделало мое понимание HTTP намного лучше и сделало меня и многих других лучше веб-разработчиками :)
Мой вывод: нет способа полностью избавиться от 401-х с NTLM (кроме как из первых двух). Они всегда возвращаются при использовании метода POST, а также при использовании веб-служб - создается новое соединение с IIS, для чего происходит новый процесс аутентификации (дают еще 2 401). Satumba
Благодарю. Насчет шапки я проверил и там всегда "оставайся в живых". Какие настройки IIS, кроме AuthPersistSingleRequest (как описано в посте, который я прикрепил), могут мне помочь, знаете ли вы? Satumba
3

setspn -a FQDNServerName applicationPoolServiceAccount
setspn -a biosServerName applicationPoolServiceAccount

Это позволяет пулу приложений обслуживать запросы аутентификации NTLM.

0

У меня тоже была эта проблема, за исключением того, что для меня это были в основном файлы JS и CSS. Мой сайт (как и большинство сайтов) хранит файлы JS и CSS в своих собственных каталогах. Поэтому решение для меня было просто перейти в эти каталоги в IIS и включить Anon Auth (я говорю просто, но мне потребовалось два года, чтобы разобраться с этим; благодаря этому посту). Теперь сайт все еще требует аутентификации Windows, а подкаталоги для файлов JS и CSS - нет. IOW, кажется, работает отлично.

Я также никогда бы не поместил конфиденциальную информацию в файл JS (или CSS-файл в этом отношении) и предложил бы, чтобы вы тоже этого не делали. Если вы это сделаете, вы, очевидно, захотите переместить конфиденциальную информацию в этих файлах из этих каталогов.

1

У меня точно такая же проблема! Я использую ту же среду, что и вы. За исключением того, что я вижу 2 401 даже в Fiddler. Я потратил пару дней на эту проблему, а затем просто сдался. AuthPersistence у меня тоже не сработало. Но вот ссылки, которые я нашел, возможно, они будут работать в вашем случае.

http://msdn.microsoft.com/en-us/library/ms525244.aspx

http://www.microsoft.com/technet/prodtechnol/WindowsServer2003/Library/IIS/b0b4ec5c-74f8-43e9-ac64-d8b852568341.mspx?mfr=true

http://technet.microsoft.com/en-us/library/cc786094.aspx

http://technet.microsoft.com/en-us/library/cc781339(WS.10).aspx

Я пытался установить флаг как на уровне виртуального каталога, так и на уровне веб-сайта, но это не помогло. Используете ли вы IIS Metabase Explorer для редактирования этих свойств? Это более чистый способ редактирования свойств и может помочь не только непосредственное редактирование файла XML.

Один из способов обойти эту проблему - вставить заголовок Cache-Control в HTTP-ответ для ресурсов, которые не будут часто меняться ни на одной странице. В моем случае я кешировал css (максимально используйте внешние css для оптимизации), js и img файлы. Поскольку у меня есть около 60 файлов этих типов, которые загружаются на нашу домашнюю страницу, мы смогли сразу устранить около 120 401 ошибок!

Убедитесь, что вы используете заголовок Cache-Control, а не кэширование, если оно модифицировано или основано на e-тегах, где 401 и 304 будут генерироваться, даже когда файлы кэшируются.

Спасибо за поддержку :) +1 Satumba
2

Это могут быть ваши настройки безопасности в IE6 для сайта. Попробуйте перейти на локальный интранет или доверенный сайт.

Похожие вопросы