Путеводитель по статье:
Авторизация пользователей Joomla через Active Directory LDAP
Никогда не думал, что столкнусь с такой задачей, тем не в один прекрасный день возникла необходимость создать корпоративный портал для внутреннего использования. В организации есть домен и куча пользователей в этом домене. Было бы безусловно круто не плодить сущности (не создавать заново учетки для пользователей), а как-то привязаться к домену.
Сначала был долгий мозговой штурм и решали на чем делать этот портал — то ли вручную на PHP или ASP, то ли использовать какой-то готовый узкоспециализированный продукт и использовать его. При том, что этот продукт должен быть бесплатным. Естественно, никакого вменяемого бесплатного решения именно для корпоративного портала не нашлось, а писать все это вручную не было особого желания, возникла мысль — «а может Joomla?»
Сначала эту идею пытались закопать, ибо «не круто» но чем дальше обсуждали, тем больше чаша весов склонялась в пользу Joomla. Проверенного, распространенного и абсолютно бесплатного. Осталось решить только одно — как подружить Joomla с Active Directory. Оказалось, это возможно, хотя пришлось немного повозиться.
Я не буду расписывать такие простые истины, например, как установить Joomla на локальный хост и прочее, сразу к делу.
1 этап — правка файла PHP.ini
Нужно раскомментировать строчку:
extension=php_ldap.dll
Это библиотека, благодаря которой возможно взаимодействие Joomla с доменом Active Directory по протоколу LDAP.
2 этап — настройка плагина «Авторизация LDAP»
Идем в менеджер плагинов и ищем среди них «Авторизация LDAP», активируем его.
Предположим, что домен у нас называется domain.local, адрес контроллера домена — 192.168.0.1.
В настройках плагина нужно сделать следующие настройки (по крайней мере, у меня так заработало 🙂
Параметр
|
Значение
|
Комментарий
|
Хост
|
192.168.0.1
|
IP-адрес контроллера домена
|
Порт
|
389
|
не трогаем
|
Выполнять LDAP3
|
ДА
|
|
Выполнять TLS
|
НЕТ
|
|
Следовать перенаправлениям
|
НЕТ
|
|
Метод авторизации
|
Привязать и найти
|
При успешной авторизации Joomla создаст свою
внутреннюю учетку, которую можно будет потом поместить в ту или иную группу доступа. К сожалению, группы пользователей из Active Directory Joomla подтягивать не умеет. Если нашли способ сделать это, поделитесь в комментариях к статье! |
Базовый DN
|
dc=domain,dc=local
|
Разделяем домен на уровни и перед каждым
уровнем пишем dc=…, между ними никаких пробелов, только запятые |
Строка поиска
|
sAMAccountName=[search]
|
Регистр имеет значение!
|
Пользовательский DN
|
оставляем пустым
|
|
Имя пользователя подлючения
|
Имя доменного администратора
|
|
Пароль подключения
|
qwerty123
|
Соответственно, пароль доменного администратора
|
Map: Full Name
|
displayName
|
То, как на сайте будет высвечиваться имя пользователя
|
Map: Email
|
mail
|
то же самое — емэйл
|
Map: User ID
|
uid
|
идентификатор пользователя
|
Сохраняем настройки, открываем сайт и пытаемся залогиниться. При этом вводить имя доменного пользователя указываем без @domain.local — все должно заработать!
Подозреваю, что многие нюансы зависят от версий программного обеспечения. На всякий случай, все это тестировалось на следующем сервере:
- Веб-сервер — Xampp 5.6.15 (PHP 5.6.15)
- Joomla 3.6.3
- Контроллер домена Windows Server 2008 R2
Замечена странность — Joomla не хочет авторизовать пользователей, чей логин в домене не совпадает с адресом электронной почты в Exchange. При попытке авторизации выдается сообщение об ошибке:
Решение данной проблемы пока не найдено. Если вы знаете, как это преодолеть, пожалуйста, поделитесь в комментариях.