Руководство по настройке интеграции с LDAP

# Аутентификация

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