Как работает NTLM SSO в домене Windows?

Я сделал доказательство концепции для однократного входа в TypeScript с использованием NodeSSPI. Это работает, я получаю имя пользователя, в котором я зарегистрирован в нашем корпоративном домене AD, без ввода каких-либо данных учетной записи или учетных данных. Но я хочу знать, как это возможно в деталях, потому что он работает в IE и Chrome из коробки. Я нашел эту статью MSDN о NTLM, которая гласит:

  1. Имя пользователя вошедшего пользователя отправляется на сервер
  2. Сервер генерирует вызов случайных чисел и отправляет его клиенту
  3. Клиент шифрует вызов с помощью хэша пароля пользователя и отправляет его обратно на сервер
  4. Сервер отправляет имя пользователя, вызов и вызов-ответ DC
  5. DC сравнивает PW с базой данных и аутентифицирует пользователя, если он соответствует

Мне особенно интересно о шагах 1 и 2: Где это происходит? Как, например, имя пользователя передается на сервер? Является ли это частью запроса http? Я просмотрел запрос от инструментов разработчика Chrome и не смог увидеть заголовок или другую информацию, которая указывает, что, например, мое имя пользователя AD отправляется на сервер.

Обратите внимание: Эти вопросы относятся только к SSO, где учетные данные не поставляются пользователем! Причина, когда пользователь вводит свои полномочия, это понятно.

1 ответ

Является ли это частью запроса http?

Да. Как описано в RFC 4559, вы должны увидеть заголовок WWW-Authenticate: Negotiate из ответа сервера и, как следствие, заголовок авторизации от клиента.

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

licensed under cc by-sa 3.0 with attribution.