[Перевод] OpenIDM: Управление учетными записями Active Directory
Введение
В данной статье мы настроим управление учетными записями Active Directory из OpenIDM. Рассмотрим типовой сценарий, когда служба HR оформляет на работу нового сотрудника, вносит его учетные данные в систему управления учетными записями (IDM) и из этой системы данные должны импортироваться в основной каталог. Как правило, это Active Directory.
Настройка OpenIDM
Как быстро развернуть OpenIDM было описано в этой статье. Поэтому, будем считать, что OpenIDM у вас уже развернут.
Настройка коннектора Active Directory.
Из каталога samples/provisioners поставки OpenIDM возьмите файл provisioner.openicf-adldap.json
и скопируйте его в каталог установки openidm/conf Измените значения конфигурации в соотвествии с вашим окружением:
Перейдите в консоль администратора Configure → Connectors. В открывшемся списке выберите AD LDAP Connector и установите настройки согласно таблице
OpenID LDAP Active Directory Connector.png
Настройка | Описание | Пример значения |
---|---|---|
host | Имя хоста с AD | ad.example.org |
port | Порт подключения к AD | 636 |
ssl | Использование зашифрованного соединения | true |
principal | Имя учетной записи, под которой будут осуществляться операции с AD | DOMAIN/Administrator |
credentials | Пароль учетной записи (строка, после сохранения значение будет зашифровано) | |
baseContexts | Список стартовых точек LDAP для поиска учетных записей | CN=Users, DC=example, DC=org |
baseContextsToSynchronize | Список стартовых точек LDAP для поиска учетных записей для синхронизации | CN=Users, DC=example, DC=org |
accountSearchFilter | Фильтр, отбирающий учетные записи пользователей | (objectClass=user) |
accountSynchronizationFilter | Фильтр, отбирающий учетные записи пользователейе для синхронизации | (objectClass=user) |
groupSearchFilter | Фильтр, отбирающий группы | (objectClass=group) |
groupSynchronizationFilter | Фильтр, отбирающий группы для синхронизации | (objectClass=group) |
Для синхронизации паролей из OpenIDM в Active Directory необходимо, чтобы подключение было по защищенному протоколу. Для установки защищенного соединения, сохраните сертификат из Active Directory командой:
openssl s_client -showcerts -connect ad.example.org:636 /dev/null|openssl x509 -outform PEM > ad_cert.pem
И загрузите сертификат в trust store OpenIDM командой:
keytool -import -alias openidm-ad -file ad_cert.pem -storetype JKS -keystore truststore
Trust store находится в каталоге дистрибутива OpenIDM в каталоге openidm/security. Пароль для trust store по умолчанию — changeit
Так же для синхронизации паролей из OpenIDM добавьте в файл конфигурации коннектора Active Directory provisioner.openicf-adldap.json
в объект account поле password
после поля whenCreated
.
"password" : {
"type" : "string",
"nativeName" : "__PASSWORD__",
"nativeType" : "JAVA_TYPE_GUARDEDSTRING",
"flags" : [
"NOT_READABLE",
"NOT_RETURNED_BY_DEFAULT"
]
}
Проверка настройки Active Directory
В UI в настройках коннектора AD вверху справа нажмите кнопку с тремя точками и выберите пункт Data (account). Появится список учетных записей Active Directory
OpenIDM Active Directory Connector Data Account
OpenIDM Active Directory Connector Data Account List
Настройка синхронизации учетных записей OpenIDM и Active Directory.
В консоли администратора перейдите Configure → Mappings. Нажмите кнопку New Mapping.
OpenIDM Mappings
В source resource добавьте Managed Object → user. В target resource добавьте Connectors → ad.
OpenIDM User AD Mapping
И нажмите кнопку Create mapping
В консоли администратора перейдите Configure → Mappings → managedUser_systemAdAccount
В Attributes Grid настройте сопоставление атрибутов согласно таблице
Источник | Приемник | Trasnformation script | Conditional updates |
---|---|---|---|
userName | dn |
| |
givenName | givenName | ||
sn | sn | ||
cn | `source.displayName | ||
description | description |
| |
telephoneNumber | telephoneNumber |
| |
userName | sAMAccountName | ||
password | password |
На закладке Behaviors в разделе Policies выберите Default Actions и нажмите Save
Отправка пароля по Email
В OpenIDM есть возможность генерировать случайный пароль и отправлять его на email. Для настройки в консоли администратора перейдите Configure → System Preferences → Email. Введите настройки SMTP сервера и нажмите кнопку Save
OpenIDM Email SMPT Settings
Проверка решения
Создание учетной записи
Теперь, когда мы настроили подключение к Active Directory и синхронизацию между учетными записями OpenIDM и AD, давайте проверим работу решения. В консоли администратора перейдите Manage → User и создайте новую учетную запись, нажав кнопку New User. Заполните атрибуты нового пользователя и нажмите кнопку SaveУ
OpenIDM new IDM user
Учетную запись так же можно создать при помощи REST API OpenIDM
curl 'http://localhost:8080/openidm/managed/user?_action=create' \
-H 'X-OpenIDM-Username: openidm-admin' \
-H 'X-OpenIDM-Password: openidm-admin' \
-H 'Content-Type: application/json' \
--data-raw '{"mail":"jdoe@example.org","sn":"John","givenName":"Doe","telephoneNumber":"+7(999)123-45-67","userName":"idmUser"}' | json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 357 0 242 100 115 1340 637 --:--:-- --:--:-- --:--:-- 2063
{
"_id" : "a250eb09-28a1-4fab-b338-e729986f38ec",
"_rev" : "2",
"accountStatus" : "active",
"effectiveAssignments" : [],
"effectiveRoles" : [],
"givenName" : "Doe",
"mail" : "jdoe@example.org",
"sn" : "John",
"telephoneNumber" : "+7(999)123-45-67",
"userName" : "idmUser"
}
Проверить наличие созданной учетной записи можно так же при помощи GET запроса к API
curl 'http://localhost:8080/openidm/managed/user?_queryFilter=true' \
-H 'X-OpenIDM-Username: openidm-admin' \
-H 'X-OpenIDM-Password: openidm-admin' | json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 380 0 380 0 0 25112 0 --:--:-- --:--:-- --:--:-- 47500
{
"pagedResultsCookie" : null,
"remainingPagedResults" : -1,
"result" : [
{
"_id" : "a250eb09-28a1-4fab-b338-e729986f38ec",
"_rev" : "2",
"accountStatus" : "active",
"effectiveAssignments" : [],
"effectiveRoles" : [],
"givenName" : "Doe",
"mail" : "jdoe@example.org",
"sn" : "John",
"telephoneNumber" : "+7(999)123-45-67",
"userName" : "idmUser"
}
],
"resultCount" : 1,
"totalPagedResults" : -1,
"totalPagedResultsPolicy" : "NONE"
}
Учетная запись OpenIDM будет синхронизирована в Active Directory автоматически
Проверьте ее наличие в AD командой
ldapsearch -H ldap://ad.example.org.ru -x -W -D "admin@example.org" -b "dc=example,dc=org" "(sAMAccountName=idmUser)" | grep dn
Enter LDAP Password:
dn: CN=idmUser,CN=Users,DC=example,DC=org
Отправка пароля по Email
Если вы хотите установить пароль случайный пароль для Active Directory, перейдите на закладку Password и нажмите на кнопку Email Random Password.
OpenIDM Email Random Password
Или при помощи POST запроса к API
curl 'http://localhost:8080/openidm/managed/user/a250eb09-28a1-4fab-b338-e729986f38ec?_action=resetPassword' \
-X 'POST' \
-H 'X-OpenIDM-Username: openidm-admin' \
-H 'X-OpenIDM-Password: openidm-admin' | json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 242 0 242 0 0 100 0 --:--:-- 0:00:02 --:--:-- 101
{
"_id" : "a250eb09-28a1-4fab-b338-e729986f38ec",
"_rev" : "4",
"accountStatus" : "active",
"effectiveAssignments" : [],
"effectiveRoles" : [],
"givenName" : "Doe",
"mail" : "jdoe@example.org",
"sn" : "John",
"telephoneNumber" : "+7(999)123-45-67",
"userName" : "idmUser"
}
Будет сгенерирован новый пароль и отправлен пользователю на Email. Этот же пароль будет установлен для входа в Active Directory.
Удаление учетной записи
В консоли администратора перейдите Manage → User. Выберите учетную запись и нажмите Delete.
OpenIDM Delete Account
Во всплывающем диалоге нажмите кнопку Ок.
При помощи DELETE запроса к OpenIDM API:
curl 'http://localhost:8080/openidm/managed/user/a250eb09-28a1-4fab-b338-e729986f38ec' \
-X 'DELETE' \
-H 'X-OpenIDM-Username: openidm-admin' \
-H 'X-OpenIDM-Password: openidm-admin' | json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 242 0 242 0 0 756 0 --:--:-- --:--:-- --:--:-- 773
{
"_id" : "a250eb09-28a1-4fab-b338-e729986f38ec",
"_rev" : "4",
"accountStatus" : "active",
"effectiveAssignments" : [],
"effectiveRoles" : [],
"givenName" : "Doe",
"mail" : "jdoe@example.org",
"sn" : "John",
"telephoneNumber" : "+7(999)123-45-67",
"userName" : "idmUser"
}
Проверим удаление учетной записи OpenIDM через REST API
curl 'http://localhost:8080/openidm/managed/user?_queryFilter=true' \
-H 'X-OpenIDM-Username: openidm-admin' \
-H 'X-OpenIDM-Password: openidm-admin' | json_pp
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 138 0 138 0 0 7306 0 --:--:-- --:--:-- --:--:-- 11500
{
"pagedResultsCookie" : null,
"remainingPagedResults" : -1,
"result" : [],
"resultCount" : 0,
"totalPagedResults" : -1,
"totalPagedResultsPolicy" : "NONE"
}
Проверьте наличие учетной записи в Active Directory командой:
ldapsearch -H ldap://ad.example.org.ru -x -W -D "admin@example.org" -b "dc=example,dc=org" "(sAMAccountName=idmUser)" | grep dn | wc -l
Enter LDAP Password:
0
Как видно из вывода команды, учетная запись была удалена из AD.