Вопрос или проблема
Сводка проблемы:
Я разрабатываю решение для единого входа (SSO) с использованием Duende IdentityServer и испытываю периодические проблемы с аутентификацией в Google Chrome при использовании Negotiate через NTLM. Проблема возникает, в частности, после очистки данных браузера и файлов cookie.
Симптомы:
Ошибка “Этот сайт недоступен”: Сразу после очистки данных браузера и попытки аутентификации я получаю ошибку “Этот сайт недоступен” при попытке доступа к странице /account/login.
Ответы 401 Неавторизовано: В DevTools Chrome на вкладке сети постоянно отображается ошибка 401 Неавторизовано по запросу аутентификации.
Понижение протокола с HTTP/2 до HTTP/1.1: Иногда, после первоначального сбоя, протокол понижается с HTTP/2 до HTTP/1.1, и аутентификация завершается успешно при повторной попытке.
Дополнительные детали:
Проблема воспроизводится только после очистки данных браузера; обычное серфинг не проявляет этой проблемы.
Сервер поддерживает как протоколы HTTP/2, так и HTTP/1.1.
Последующие попытки аутентификации (без очистки данных) проходят без ошибок.
Что я пробовал:
Тестирование без очистки данных: Аутентификация работает безупречно, когда данные браузера не очищаются.
Анализ сетевого трафика: Подтвердил ответы 401 и понижение протокола в DevTools.
Проверка конфигурации сервера: Убедился, что сервер правильно настроен для поддержки NTLM и HTTP/2.
Мои вопросы:
Почему очистка данных браузера в Chrome вызывает временную ошибку “сайт недоступен” при использовании аутентификации NTLM Negotiate?
Что вызывает первоначальную ошибку 401 и понижение протокола с HTTP/2 до HTTP/1.1?
Как я могу предотвратить или обработать эту проблему, чтобы обеспечить плавный опыт аутентификации, даже после очистки данных браузера?
Среда:
Браузер: Google Chrome (последняя версия на октябрь 2024)
Протокол аутентификации: Negotiate через NTLM
Реализация SSO: Duende IdentityServer
Бэкэнд: приложение ASP.NET Core, работающее на веб-сервере Kestrel
Операционная система: Windows Server (подробности версии)
Любые идеи, объяснения или решения будут очень ценны!
Ответ или решение
Проблема "Сайт недоступен" и ошибки 401 с Duende SSO при использовании NTLM Negotiate в Chrome
Введение
Вы столкнулись с распространенной проблемой, характерной для аутентификации через Single Sign-On (SSO) с использованием Duende IdentityServer и протокола NTLM Negotiate. Рассмотрим причины проблемы, возможные решения и рекомендации для получения стабильного пользовательского опыта.
Причины возникновения ошибок
-
Очистка данных браузера
Очистка кэша и куков приводит к сбросу сохраненных аутентификационных сессий в Chrome. Это может повлиять на установление нового соединения. В частности, при использовании NTLM происходит повторная аутентификация с сервером. Если пользовательский агент не может корректно инициализировать запрос на аутентификацию из-за отсутствия соответствующих кешированных данных, вы можете получить ошибку "Сайт недоступен". -
401 Unauthorized ошибка
Первоначальная ошибка 401 объясняется тем, что после очистки данных у клиента отсутствуют необходимые учетные данные для NTLM аутентификации, и сервер отклоняет запрос. Сервер не может выполнить запрос, поскольку он не распознает пользователя как авторизованного. -
Понижение протокола с HTTP/2 до HTTP/1.1
Понижение протокола может свидетельствовать о проблемах с трубопроводами или несовместимых настройках. HTTP/2 имеет несколько оптимизаций для заголовков и потоков, которые могут не поддерживать старые механизмы аутентификации. Если на первом запросе аутентификация не удалась, браузер пытается перейти на более стабильный HTTP/1.1, который лучше справляется с ошибками, но при этом теряет некоторые преимущества HTTP/2.
Рекомендации по устранению проблемы
-
Проверка конфигурации сервера
Убедитесь, что сервер правильно настроен для работы с NTLM и поддерживает оба протокола (HTTP/2 и HTTP/1.1). Проверьте конфигурации Kestrel и убедитесь, что они соответствуют требованиям для аутентификации NTLM. -
Обработка ошибок аутентификации
Создайте обработчики для управления состоянием сессии пользователя. Например, в случае возникновения ошибки 401, вы можете предоставить пользователям уведомление с предложением повторной попытки аутентификации. Это обеспечит более плавный переход в случае возникновения временных проблем. -
Недопустимые настройки браузера
Рассмотрите возможность настройки параметров Chrome, чтобы он не сохранял данные между сессиями. Это может помочь минимизировать случаи, когда пользователю требуется повторно выполнить аутентификацию. -
Мониторинг и логирование
Включите детальное логирование на уровне сервера, чтобы отслеживать периодические сбои и ошибки аутентификации, возникающие после очистки данных браузера. Анализ логов поможет выявить закономерности и улучшить стабильность системы. -
Поддержка пользователей
Предоставьте вашим пользователям информацию о том, как очистка данных браузера может повлиять на их сеансы аутентификации. Это поможет снизить нерешительность и недоразумения при возникновении ошибок.
Заключение
Раскрытые выше проблемы аутентификации с помощью Duende IdentityServer и NTLM Negotiate требуют тщательного анализа и тестирования. Предпринятые усилия по улучшению конфигурации сервера, обработке ошибок и глубинному монитору системы обеспечат большую стабильность и улучшат пользовательский опыт. Помните, что информирование ваших пользователей играет ключевую роль в успешной реализации SSO решений.
Если у вас возникнут дополнительные вопросы или потребуется углубленная поддержка, не сомневайтесь в необходимости проводить дальнейшие исследования или консультации с экспертами в области безопасности и аутентификации.