NTLM

Материал из Eludia
(перенаправлено с «NTLM-авторизация»)
Перейти к: навигация, поиск

Внммание! Большая часть содержательной информации данного раздела перенесена в статью Аутентификация. Остальное — удалено.

Немного теории

Прежде всего опишем вкратце, в чём заключается NTLM-авторизация в WEB-приложениях (подробное описание можно найти здесь). Если обычный успешный HTTP-запрос обрабатывается так:

  • клиент шлёт запрос;
  • сервер шлёт ответ с кодом 200 (ОК);

то в случае NTLM всё чуть сложнее:

  • клиент шлёт обычный запрос;
  • сервер шлёт ответ 1-го типа с кодом 401 (Authorization required) как запрос на логин
  • клиент шлёт запрос c логином;
  • сервер шлёт ответ 2-го типа с кодом 401 C заголовком WWW-Authenticate, содержащим случайный ключ;
  • клиент повторяет запрос, но сопровождает его NTLM-хэшем, зашифрованным на этом ключе;
  • сервер шлёт ответ с кодом 200 (конечно, если проверка логин/хэш прошла успешно).

Отсюда сразу следуют 2 вещи:

  1. использование NTLM-авторизации чревато многократным умножением количества запросов (хотя большого трафика они и не создают);
  2. всё это может работать только в режиме Keep-alive.

Последнее ограничение весьма неприятно, поскльку исключает возможность установки сервера приложения за реверсным proxy. Тем не менее, такова жизнь.

Если пользователь авторизовался в Windows при помощи домена, используемого вашим приложением, то браузер может вести диалог с сервером, не выдавая пользователю login-форму, в зависимости от настроек.

Оригинальное решение

Eludia.pm содержит собственный набор процедур для работы с заголовками NTLM. На момент написания настоящего текста состояние кода можно рассматривать как бету, при установке возможны разнообразные неожиданности. Тем не менее, механизм в целом работоспособен.

Реализован он несколько легкомысленно (выдача одного-единственного, раз навсегда заданного заголовка 2-го типа), однако это даёт неоспоримое преимущество: режим keep-alive не требуется, так что сервер можно устанавливать за HTTP proxy. Кроме того, реализована поддержка NTLMv2, так что Vista-клиенты вполне работоспособны.

Ограничения:

  • ActiveDirectory не поддерживается, только его эмуляция на базе Samba;
  • не реализовано NTLMv1 (что актуально только для тех, у кого давно не поддерживаемые Windоws);
  • при авторизации не учитывается имя домена (то есть домен на всех один, умолчательный);
  • ни логины, ни пароли не могут содержать символов старше 127-го.

Использовать механизм просто: достаточно приписать

ntlm => 'samba',

в раздел ldap опций $preconf, остальные параметры — такие же, как выше. После установки этой опции обработчик запросов при пустом параметре sid инициирует NTLM-диалог с клиентом и в случае успешной авторизации заводит сессию для пользователя, login которого определяется по LDAP-параметру sid.


Muzzle.jpg Тема этой заметки имеет некоторое отношение к компьютерной так называемой "безопасности".
Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
Разработчику
Администратору
Инструменты