Единый вход по доменной учётной записи - настройка NTLM
Сотрудник открывает портал и попадает внутрь под доменной записью, без ввода пароля. Собираем такой вход по этапам: сервер, подключение к каталогу, браузеры и запасной путь.
Решение
Сторона сервера
Проверяем, что сервер введён в домен:
net ads testjoin # пока проверка не проходит, настраивать нечегоss -lntp | grep -E ':8890|:8891' # служебные порты переадресации: http и httpssystemctl 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. NTLMUse existing NTLM settings for the site # домен и keytab переиспользуютсяПовторное подключение к каталогу для каждого сайта не заводим. Настройка входа живёт на каждом сайте отдельно, а не на сервере целиком. Про добавленный позже сайт о ней забывают, и вход по домену там не работает.
Типичные проблемы
Браузер просит логин и пароль вместо автоматического входа.
Узел портала не входит в доверенную зону браузера, и учётные данные он не отдаёт. Добавляем в список доверия и короткое имя сайта, и полное с доменным суффиксом.
Вход работает на одних компьютерах и не работает на других.
Чаще всего мешают настройки прокси: запрос до служебного порта портала просто не доходит. Реже виноват межсетевой экран рабочей станции или антивирус с проверкой трафика.
Мастер отработал, а порты 8890 и 8891 не слушают.
Фоновая задача настройки завершилась с ошибкой, и служебные порты Apache не поднялись. Смотрим список фоновых задач окружения, а не настройки модуля на сайте.
При работе извне портал переадресует на служебный порт и не пускает.
Переадресация выполняется для всех адресов подряд, включая внешнюю сеть и мобильных сотрудников. Ограничиваем её подсетью офиса, и снаружи остаётся обычный вход по паролю.
Флаг включён, а переадресации нет вовсе.
Не заполнено поле домена в подключении к каталогу, и флаг остаётся без эффекта. Имя домена вписываем в поле точно, с учётом регистра букв.
Частые вопросы
Чем NTLM отличается от SSO via NTLM?
NTLM - это вход на портал по логину и паролю из каталога домена, форма при этом остаётся. SSO via NTLM - автоматический вход: сотрудник вводит пароль один раз при загрузке Windows, а портал открывается уже авторизованным.
Можно ли настроить единый вход на несколько доменов?
Мастер окружения настраивает один домен, и с машин соседнего домена вход отдаёт ошибку доступа. По опыту форума в родительском домене прозрачный вход работает, а в дочерних остаётся ввод логина и пароля.
Будет ли это работать без Apache?
Нет: доменная проверка выполняется именно на служебных портах Apache. Nginx-фронтенд остаётся на своём месте и проксирует запросы дальше, но сам такую проверку не делает.
Останется ли обычный вход для тех, кто вне домена?
Да, форма входа по паролю никуда не девается. Чтобы переадресация не мешала внешним посетителям, зону её действия ограничивают подсетью офиса в настройках подключения.
Как отключить единый вход, если портал стал недоступен?
Через мастер окружения по ssh, в пункте управления сайтами пула. Админка за переадресацией недоступна, поэтому снимать настройку приходится с сервера, а не из интерфейса сайта.
Смежное
- LDAP и Active Directory - оглавление подтемы
- Пользователи, группы и права доступа - устройство учётных записей
- Синхронизация с Active Directory: подключение, отбор, группы - откуда берутся доменные записи
- NTLM-авторизация не работает: разбор причин - если вход перестал срабатывать
- LDAP не подключается: причины по убыванию частоты - если каталог не отвечает
- Сайты в пуле BitrixVM - как добавляется второй сайт
- Меню окружения и службы - где искать мастер и фоновые задачи
- Окружение за прокси и в облаке - если запросы идут через прокси
- Слетает авторизация: время жизни сессии - что происходит после входа