LdapIntegration
Руководство по настройке интеграции с LDAP
Версия 4.6.0
© 2015-2023, ООО "Процессные технологии"
# Аутентификация
LDAP аутентификация позволяет пользователям входить в RunaWFE с паролем из LDAP.
Пользователь должен существовать в RunaWFE.
В контексте Spring (system.context.xml) есть бин, ответственный за список логин-модулей, используемых для аутентификации, включите модуль отвечающий за LDAP аутентификацию - ru.runa.wfe.security.auth.LdapLoginModule
Для этого воспользуйтесь правилом расширения контекста Spring.
Создайте файл wfe.custom.system.context.xml, расположите его в каталоге ..\standalone\wfe.custom (если директория wfe.custom не существует, создайте ее). Например, для Windows версии RunaWFE, в случае использования симулятора сервера, файл wfe.custom.system.context.xml должен быть помещен в C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <bean id="loginModuleConfiguration" class="ru.runa.wfe.security.auth.LoginModuleConfiguration"> <property name="loginModuleClassNames"> <list> <value>ru.runa.wfe.security.auth.LdapLoginModule</value> <value>ru.runa.wfe.security.auth.InternalDbPasswordLoginModule</value> </list> </property> </bean> </beans>
При такой конфигурации, первой будет выполняться LDAP аутентификация, в случае провала, аутентификация будет выполняться с помощью модуля InternalDbPasswordLoginModule.
Далее требуется определить настройки соединения с сервером LDAP (java.naming.provider.url) и формат логина пользователя (authentication.username.format).
java.naming.provider.url = ldap://mycompany.local authentication.username.format = MYCOMPANY\\${username}
Установите эти параметры в соответствии с вашей организацией топологии.
# Синхронизация пользователей и групп
Требуется определить настройки соединения с сервером LDAP и настройки синхронизации.
В интерфейсе станет доступна ссылка для синхронизации с LDAP в списке исполнителей.
# Периодическая синхронизация
Для настройки таймера по периодической синхронизации нужно расширить контекст Spring. Настройки периода задаются в миллисекундах.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:jee="http://www.springframework.org/schema/jee" xmlns:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd"> <task:scheduler id="ldapScheduler" /> <bean id="ldapSynchronizer" class="ru.runa.wfe.job.impl.LdapSynchronizer" /> <task:scheduled-tasks scheduler="ldapScheduler"> <task:scheduled ref="ldapSynchronizer" method="execute" fixed-delay="60000" /> </task:scheduled-tasks> </beans>
# Настройки
Требуется создать файл ldap.properties в каталоге ${JBOSS_HOME}/standalone/wfe.custom (например C:\Program Files\RunaWFE\Simulation\standalone\wfe.custom\).
Пример файла
################################ # Common connection settings ################################ # allowed http://docs.oracle.com/javase/7/docs/technotes/guides/jndi/jndi-ldap.html java.naming.factory.initial = com.sun.jndi.ldap.LdapCtxFactory java.naming.provider.url = ldap://localhost java.naming.security.authentication = simple java.naming.ldap.version = 3 ################################ # Authentication module settings ################################ # How to map the user id entered by the user to that passed through to LDAP # Supported placeholders are: ${username} (user login) # Examples # AD (default) DOMAIN\\${username} # AD UPN ${username}@domain # AD DN cn=${username},ou=xyz,dc=domain # OpenLDAP simple uid=${username},ou=People,dc=domain,dc=com # OpenLDAP DIGEST-MD5 ${username} authentication.username.format = DOMAIN\\${username} ################################ # Synchronization module settings ################################ synchronization.enabled = true synchronization.import.group.name = ldap users synchronization.import.group.description = users imported from ldap server synchronization.waste.group.name = ldap waste synchronization.waste.group.description = users and groups deleted from ldap server java.naming.referral = follow # authorized subject to read directory java.naming.security.principal = cn=LdapReader,ou=User_policy,dc=domain,dc=com java.naming.security.credentials = secret # organization units you want to import separated by <;> synchronization.organization.units = ou=system # partial synchronization can be enabled synchronization.create.executors.enabled = true synchronization.update.executors.enabled = true synchronization.delete.executors.enabled = true synchronization.user.status.enabled = true # types synchronization.object.class.filter = (objectclass={0}) synchronization.user.object.class = person synchronization.group.object.class = group # whether to reset empty attributes synchronization.empty.attribute.enabled = true # synchronization attribute mappings synchronization.account.name.attribute = cn synchronization.user.fullName.attribute = cn synchronization.user.description.attribute = description synchronization.user.title.attribute = title synchronization.user.email.attribute = mail synchronization.user.phone.attribute = telephoneNumber synchronization.user.department.attribute = department synchronization.group.description.attribute = name synchronization.group.member.attribute = member