AZykov (обсуждение | вклад) |
AZykov (обсуждение | вклад) |
||
| Строка 13: | Строка 13: | ||
Для удобства работы, подготовлены шаблоны этих сценариев: | Для удобства работы, подготовлены шаблоны этих сценариев: | ||
[[:Файл:Ldap auth template.zip]] | |||
[[:Файл:Ldap sync template.zip]] | |||
= Загрузка пользователей из AD = | = Загрузка пользователей из AD = | ||
Версия от 16:01, 17 сентября 2025
Общая информация
В рамках данной статьи будет рассмотрен подход к реализации интегарции с Active Directory по протоколу LDAP.
Так же будут рассмотрены два основных кейса данной интеграции:
- Загрузка пользователей из Active Directory
- Авторизация пользователя по протоколу LDAP
Работа с LDAP в рамках платформы выполняется с помощью служебных сценариев, и в частности, компонента LDAP-интеграция.
Для синхронизации списка пользователей создается служебный сценарий, который получает список пользователей из AD с определнным фильтром, и создает/обновляет пользователей соответствующего домена платформы. С помощью Задачи (svctask) данный сценарий настраивается на выполнение по расписанию.
Для авторизации пользователя создается сценарий авторизации, который принимает авторизационные данные пользователя, выполняет запрос к AD и возвращает результат авторизации.
Для удобства работы, подготовлены шаблоны этих сценариев:
Файл:Ldap auth template.zip
Файл:Ldap sync template.zip
Загрузка пользователей из AD

Каждый из важных этапов обработки помечен комментарием. Каждый из этих шагов рекомендуется настроить под свои нужды.

Получение списка пользователей
Сценарий загрузки пользователей представляет собой обращение к LDAP, получение списка пользователей по определенному фильтру и дальнейшую обработку данных в цикле.
Для получения списка пользователей, необходимо осуществить запрос от имени доменного пользователя, у которого есть права на его получение.
В качестве действия выбирается поиск, а в качестве объекта пользователи домена:
CN=Users,DC=example,DC=com
В шаблоне в качестве примера получаются следующие атрибуты:
| Атрибут | Комментарий |
|---|---|
| objectGUID | Идентификатор пользователя в AD |
| cn | Имя пользователя |
| mobile | Мобильный телефон |
| memberof | Список групп, в которые входит пользователь |
| sAMAccountName | Имя пользователя для логина |
| distinguishedName | Полное имя пользователя |
| userPrincipalName | Имя пользователя с указанием домена (в примере используется как email) |
В строке поиска можно задать дополнительные фильтры.
Полное описание работы компонента LDAP можно найти в курсе по разработке.
После получения данных в компоненте LDAP, происходит обработка резульата в цикле.
Проверка групп пользователя

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

Перед созданием нового пользователя с помощью интеграции, необходимо осуществить его поиск для предотвращения создания дублей. Поиск выполняется с помощью компонента Операции с типом CRUD в домене, к типу объекта user. Простейший фильтр выглядит следующим образом:
'["equal",["property","login"],["const",'+ [username] +']]'
При необходимости, можно осущетвлять поиск по идентификатору из AD (objectGUID), сохраняя его при создании пользователя.
Создание пользователя платформы
Создание пользователя так же выполняется при помощи компонента "Операция". Настройки те же, однако используется метод "Создать".
Для создания пользователя используется следующий шаблон:
\{
"name": {[username]},
"login": {[username]},
"pwd": "{ [generated_password] }",
"opts": \{
"allow_script_crud": false,
"avatar_info": false,
"comment": {[user_dn]},
"email": {[user_principal_name]},
"info": \{\},
"phonenumber": "",
"pincode": "",
"roles": [
"callcenter_operator",
"callcenter_user",
"crud",
"helpdesk_support",
"meet",
"meet_user",
"monitor",
"selector",
"smart_user",
"tester_observer",
"user",
"vnd_manager",
"vnd_master",
],
"self_registered": false,
"tags": [],
"title": "",
"web_sess_limit": 10
\},
\}
Данный шаблон заполняется параметрами, прочитанными из данных LDAP. С помощью него можно заранее задать необходимые роли пользователю, указать его email, номер телефона и другие данные.
Так же, при создании пользователя ему генерируется внутренний пароль. Данный пароль не будет использоваться для входа, и не сохраняется. Он необходим только для прохождения стандартной проверки при создании пользователя.
На данном этапе часто необходима проектная доработка - возможно создание пользователей с различными правами, в зависимости от данных из AD, возможна реализация обновления прав пользователей при переходе из группы в группу. Список возможных усложнений процесса достаточно обширный, для любых подобных доработок можно использовать существующий шаблон сценария.
Логирование и отладка
На каждом из шагов сценария реализовано логирование промежуточных результатов. Для того что избежать "захламления логов", по умолчанию логируются только исключения, операции по созданию новых пользователей, а так же начало и окончание процесса интеграции.
Для удобства ручной отладки, можно переключить каждый компонент логирования в режим отправки уведомлений пользователю.
Настройка исполнения интеграции по расписанию

Для того, чтобы новые пользователи добавлялись в систему оперативно, необходимо настроить автоматический запуск интеграции. Для этого в приложении Настройки, в разделе Задачи необходимо создать новую запись, запускающую созданный сценарий.
Частота исполнения интеграции указывается в секундах, и зависит от конкретных требований к системе.
Авторизация пользователей с помощью LDAP
Для авторизации пользователей с помощью LDAP (и других средств) используется сценарий, заменяющий базовую авторизацию.
Логика работы в данном случае будет следующая:
- Форма окна логина для пользователя не меняется, ему так же необходимо будет вводить домен, логин и пароль
- Создается служебный сценарий, реализующий проверку авторизации пользователя. В зависимости от необходимости, сценарий может быть создан в мастер-домене (для работы авторизации через LDAP во всех поддоменах), либо в проектном (рабочем) домене.
- В данный сценарий будут передаваться 3 параметра: 1 - домен, параметр 2 - логин, параметр 3 - пароль.
- В сценарии создается переменная с именем "result". Если в ней по завершении работы сценария будет 1, то аутентификация происходит. Если нет, то не происходит. Если во время работы сценария возникла ошибка, то делается попытка проверить пароль в собственном хранилище.
- В домене включается режим авторизации через служебный сценарий, назначается код. Опция настроек 'iam_domain_svcscript_code' в домене, или 'iam_general_svcscript_code' в мастер домене для всеобщей авторизации через единый сценарий в мастер-домене.
Далее, разберем шаблон сценария.

Получение авторизационных данных

Первым шагом сценария является получение авторизационных данных из входящих параметров. Получение делается с помощью функции startparam(1), startparam(2) и т.д.
Важно понимать, что первым параметром, в качестве домена придет домен платформы, а не Active Directory. Пользователи при логине так же должны указывать именно домен платформы. Непосредственно имя домена, в котором необходимо осуществить авторизацию пользователя через LDAP, необходимо либо указывать статично в компоненте запроса, либо осуществлять сопоставление имени домена платформы эра с определенным доменом Active Directory.
Например, если пользователь работает в домене платформы era.example.com, то при использовании интеграции с AD он так же должен вводить правильный домен era.example.com, а уже в сценарии авторизации, в запросе должен использоваться корневой домен AD - example.com.
Так же, по умолчанию задается негативный результат авториации.
Запрос авторизации через LDAP

Сам запрос авторизации выполняется по аналогии с получением списка пользователей, однако в данном случае выбирается дейтсвие "Авторизовать", а вместо пользователя с административными правами, передаются данные пользователя, переданные в сценарий как параметры.
Данный компонент имеет две ветки - при успешной авторизации и при неуспешной. В случае успешной авторизации устанавливается значение переменной result=1, а при неуспешной остается равным нулю, а в лог пишется сообщение об ошибке.
Использование сценария вместо базового механизма авторизации

Для того, чтобы начать использовать сценарий авторизации через LDAP, необходимо в домене (или мастер-домене) задать соответствующий параметр:
- для обычного домена - iam_domain_svcscript_code, данный параметр изменит механизм авторизации только для текущего домена
- для мастер-домена - iam_general_svcscript_code, данный параметр изменит механизм авторизации для всех доменов
При изменении данного параметра, он вступает в силу сразу после сохранения, и новые сессии пользователей будут авторизовываться через него. Существующие сессии прерваны не будут, поэтому после установки параметра, рекомендуется проверить авторизацию в другом браузере/окне инкогнито, и в случае ошибок - очистить его значение, для исправления ошибок.