Перейти к содержимому

Единый вход по доменной учётной записи - настройка NTLM

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

Решение

Сторона сервера

Проверяем, что сервер введён в домен:

Окно терминала
net ads testjoin # пока проверка не проходит, настраивать нечего
ss -lntp | grep -E ':8890|:8891' # служебные порты переадресации: http и https
systemctl status httpd # порты поднимает именно Apache, не nginx

Неавторизованного посетителя обработчик отправляет на служебный порт Apache. Там проходит доменная проверка, и посетитель возвращается на обычный порт 80 или 443 уже авторизованным. Порты заняты или закрыты - переадресация не отработает, и портал не открывается.

Настройки подключения к каталогу

Заполняем поля в подключении к серверу каталога:

Домен для NTLM авторизации: EXAMPLE.LOCAL # имя домена точно, с учётом регистра
Использовать NTLM авторизацию: да # без заполненного домена флаг бесполезен
Ограничить NTLM переадресацию подсетью: 192.168.0.1/24 # зона офиса, остальные вводят пароль

Поле домена обязательно: один флаг без него эффекта не даёт. Подсеть ограничивает зону переадресации адресами офиса, а всем остальным остаётся обычная форма входа. Модуль «AD/LDAP интеграция» держим установленным и активным: нужна версия 11.5.0 и выше.

Браузеры сотрудников

Разрешаем браузеру отдавать доменные данные:

network.automatic-ntlm-auth.trusted-uris = http://portal.example.local

Так настраивается Firefox через about:config. Internet Explorer вместо этого требует добавить портал в зону Local Intranet. Пока узел не входит в доверенные, браузер показывает окно ввода пароля.

Сопоставление с учётной записью сайта

Смотрим, кого веб-сервер передал платформе:

// временная страница внутри сайта, после проверки её удаляем
printf("REMOTE_USER=%s\n", $_SERVER['REMOTE_USER'] ?? '(пусто)');

Имя вида DOMAIN\user означает, что первая половина связки работает. Пустая переменная означает, что доменная проверка до сайта не дошла, и разбираем сервер.

Ищем сотрудника среди учётных записей сайта:

$login = preg_replace('/^.*\\\\/', '', $_SERVER['REMOTE_USER'] ?? ''); // отбрасываем домен
$res = CUser::GetList('ID', 'ASC', ['LOGIN_EQUAL' => $login],
['FIELDS' => ['ID', 'LOGIN', 'EXTERNAL_AUTH_ID']]);
while ($row = $res->Fetch()) {
// доменные записи помечены внешним идентификатором, обычные - нет
printf("%s %s внешний=%s\n", $row['ID'], $row['LOGIN'], $row['EXTERNAL_AUTH_ID'] ?: '-');
}

Заполненный внешний идентификатор отделяет доменные записи от обычных. Пустой список при заполненной переменной означает, что сотрудника на сайте пока нет. Запись приносит либо импорт из каталога, либо первый успешный вход сотрудника.

Второй сайт пула

Второму сайту пула отдаём готовые настройки:

8. Manage sites in the pool > 7. NTLM
Use existing NTLM settings for the site # домен и keytab переиспользуются

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

Типичные проблемы

Браузер просит логин и пароль вместо автоматического входа.

Узел портала не входит в доверенную зону браузера, и учётные данные он не отдаёт. Добавляем в список доверия и короткое имя сайта, и полное с доменным суффиксом.

Вход работает на одних компьютерах и не работает на других.

Чаще всего мешают настройки прокси: запрос до служебного порта портала просто не доходит. Реже виноват межсетевой экран рабочей станции или антивирус с проверкой трафика.

Мастер отработал, а порты 8890 и 8891 не слушают.

Фоновая задача настройки завершилась с ошибкой, и служебные порты Apache не поднялись. Смотрим список фоновых задач окружения, а не настройки модуля на сайте.

При работе извне портал переадресует на служебный порт и не пускает.

Переадресация выполняется для всех адресов подряд, включая внешнюю сеть и мобильных сотрудников. Ограничиваем её подсетью офиса, и снаружи остаётся обычный вход по паролю.

Флаг включён, а переадресации нет вовсе.

Не заполнено поле домена в подключении к каталогу, и флаг остаётся без эффекта. Имя домена вписываем в поле точно, с учётом регистра букв.

Частые вопросы

Чем NTLM отличается от SSO via NTLM?

NTLM - это вход на портал по логину и паролю из каталога домена, форма при этом остаётся. SSO via NTLM - автоматический вход: сотрудник вводит пароль один раз при загрузке Windows, а портал открывается уже авторизованным.

Можно ли настроить единый вход на несколько доменов?

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

Будет ли это работать без Apache?

Нет: доменная проверка выполняется именно на служебных портах Apache. Nginx-фронтенд остаётся на своём месте и проксирует запросы дальше, но сам такую проверку не делает.

Останется ли обычный вход для тех, кто вне домена?

Да, форма входа по паролю никуда не девается. Чтобы переадресация не мешала внешним посетителям, зону её действия ограничивают подсетью офиса в настройках подключения.

Как отключить единый вход, если портал стал недоступен?

Через мастер окружения по ssh, в пункте управления сайтами пула. Админка за переадресацией недоступна, поэтому снимать настройку приходится с сервера, а не из интерфейса сайта.

Смежное

Первоисточник