Почему IIS неправильно определяет мою учетную запись при использовании IWA с Negotiate?

Вопрос или проблема

Извините, если этот вопрос не соответствует теме; я пытаюсь разобраться с проблемой, выходящей за пределы моей компетенции.

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

Вот подробности настройки аутентификации IIS для моего сайта:

  • У меня включена аутентификация Windows, а все остальное (включая анонимную аутентификацию) отключено.
  • Аутентификация Windows использует аутентификацию в режиме ядра и провайдер Negotiate.

Что касается неправильной идентификации, на которую я намекнул:

  • У меня есть две учетные записи пользователей в одном и том же домене AD. Назовем их acct1 и acct2. Обычно я вхожу в систему как acct1, переключаясь на acct2, когда мне нужны расширенные привилегии.
  • Я вошел в виртуальную машину, на которой работает IIS, как acct2, чтобы настроить сайт.
  • Когда я возвращаюсь на свой локальный ПК для доступа к сайту, сайт идентифицирует меня как acct2, хотя я вошел в систему на своем ПК как acct1.
  • Все остальные, кто получал доступ к сайту, были правильно идентифицированы, даже те, у кого, как и у меня, есть более одной учетной записи.
  • Если я получаю доступ к сайту с другого ПК, будучи в системе как acct1, я правильно идентифицируюсь сайтом как acct1.
  • Парадоксально, но если я получаю доступ к сайту с самого серверного компьютера, где я вошел как acct2, он идентифицирует меня как acct1.
  • Для справки, acct2 имеет административные привилегии на моем локальном ПК, но не на другом ПК, с которого я получал доступ к сайту.
  • Это продолжается уже более недели и сохраняется даже после перезагрузки моего локального ПК. Это также происходит в разных браузерах.

Если я переключу провайдер IWA с Negotiate на NTLM, то вот что я вижу:

  • Я правильно идентифицируюсь как acct1, когда получаю доступ к сайту с моего локального ПК.
  • Я получаю запрос на ввод учетных данных, когда получаю доступ к сайту с серверной машины. Однако он не принимает учетные данные ни для acct1, ни для acct2.

Меня не слишком беспокоит доступ к сайту с сервера, но мне нужно правильно идентифицироваться при доступе с моего ПК. Я бы предпочел использовать Negotiate вместо NTLM.

Я разработчик, а не системный администратор, но я пытаюсь найти какие-либо следы, которые могли бы помочь мне сузить круг того, что происходит, и, возможно, направить нашу команду инфраструктуры в правильном направлении. Похоже ли это на проблему с конфигурацией Active Directory или Kerberos?

Сайт представляет собой приложение Python Flask, работающее как приложение FastCGI в IIS через библиотеку Python wfastcgi. Сайт считывает значение переменной запроса REMOTE_USER, чтобы получить результат процесса аутентификации IWA.

  1. Это чаще тема Stack Overflow о том, как правильно использовать фреймворки приложений, такие как Flask. Администраторы серверов здесь могут быть не так хорошо знакомы с программированием.
  2. FastCGI через wfastcgi больше не является надежным подходом, так как никто не поддерживает этот пакет.
  3. HttpPlatformHandler предоставляет информацию о пользователе через специальный HTTP-заголовок (X-IIS-WindowsAuthToken), и вам нужно декодировать это на стороне Python/Flask. Более подробная информация в этом блоге.

Классический ASP/ASP.NET 2.x/4.x/ASP.NET Core обрабатываются Microsoft по-другому, поэтому сравнение вашего с любым из них не имеет смысла.

Благодаря подсказке от @massimo, которую расширил @grawity, я нашел ответ. Оказалось, что это было простое дело, связанное с сохранением учетных данных в Менеджере учетных данных Windows.

Я предполагал, что процесс аутентификации Kerberos всегда будет использовать учетные данные из моего активного входа в Windows, где я вхожу как acct1. Однако учетные данные, связанные с компьютером, где размещен мой сайт, были сохранены в Менеджере учетных данных (в разделе учетных данных Windows, а не веб-учетных данных, к вашему сведению), и, похоже, система использовала их после того, как каким-то образом определила, что сайт размещен на этом компьютере. (Мое понимание здесь все еще не четкое.) Сохраненные учетные данные использовали acct2.

В любом случае, после удаления сохраненных учетных данных и перезагрузки моего ПК, сайт идентифицировал меня как acct1, как я и ожидал.

.

Ответ или решение

Причина, по которой IIS неправильно идентифицировал вашу учетную запись при использовании Windows Authentication (IWA) с провайдером Negotiate, связана с особенностями Kerberos-аутентификации в связке с Credential Manager в операционной системе Windows. Позвольте объяснить это детальнее, используя подход TEA (Теория, Пример, Применение).

Теория

Kerberos — это протокол аутентификации, который часто используется в корпоративных сетях для обеспечения безопасности доступа к ресурсам. Он обеспечивает безопасную передачу учетных данных и отвечает за идентификацию пользователей в сети. Основное преимущество Kerberos заключается в его способности аутентифицировать пользователей без необходимости повторного ввода учетных данных для каждого ресурса, к которому они пытаются получить доступ.

Когда вы используете аутентификацию Windows в IIS с включенным режимом Negotiate, IIS пытается использовать Kerberos по умолчанию для аутентификации пользователей. Однако в случае, если Kerberos не может быть использован из-за каких-либо ограничений или ошибок, он переключается на NTLM. Это может привести к ситуациям, когда аутентификация проходит не так, как ожидалось. Одним из таких случаев может быть наличие сохраненных учетных данных в Credential Manager вашего компьютера.

Credential Manager в Windows — это инструмент, который хранит ваши учетные данные (логины и пароли) для доступа к удаленным ресурсам. Это удобный механизм для упрощения процесса входа на сайты и сервисы. Тем не менее, если в Credential Manager сохранены учетные данные для конкретного сервера или пользователя, они могут быть использованы вместо текущих учетных данных пользователя.

Пример

В вашем случае, как вы выявили, в Credential Manager на вашем локальном компьютере были сохранены учетные данные для учетной записи acct2. Эти данные использовались IIS каждый раз, когда вы пытались зайти на ваш сайт с вашего ПК, что и вызывало неправильную идентификацию. Несоответствие в том, почему для других пользователей такая ошибка не встречалась, может объясняться тем, что у них не было сохраненных учетных данных в Credential Manager для данной машины.

Применение

Лучшим решением в данной ситуации, как вы уже выяснили, является удаление сохраненных учетных данных в Credential Manager. После удаления этих данных и перезагрузки компьютера, при следующей попытке доступа к сайту будут использоваться текущие локальные учетные данные пользователя acct1, и IIS сможет правильно вас идентифицировать.

Однако стоит учитывать и другие контекстные особенности. Например:

  1. Проверка конфигурации IIS: Убедитесь, что все параметры аутентификации настроены корректно, особенно в той части, где происходит взаимодействие с Active Directory. Это поможет убедиться, что аутентификация работает должным образом во всех сценариях.

  2. Логирование и мониторинг: Включите подробное логирование в IIS, чтобы отслеживать процесс аутентификации и быстро выявлять причину возможных сбоев.

  3. Ограничения на использовании NTLM: Если вы стремитесь использовать Negotiate, учтите, что NTLM имеет свои ограничения и меньшее количество опций безопасности по сравнению с Kerberos. Повторная настройка может потребоваться в случае, если отдельные элементы вашей сети не поддерживают Kerberos.

  4. Обновление инфраструктуры: Как вы отметили, FastCGI через wfastcgi больше не поддерживается. Рассмотрите возможность обновления инфраструктуры, чтобы использовать подерживаемые и более современные решения.

Таким образом, понимание того, как взаимодействуют различные компоненты вашей сети, в сочетании с правильной настройкой IIS и системой управления учетными данными Windows, позволяет избежать подобных ситуаций в будущем. Рассмотрите также возможность налогать политик использования Credential Manager в своей сети, чтобы минимизировать риск некорректной аутентификации.

Оцените материал
Добавить комментарий

Капча загружается...