Настройка
На странице описана дополнительная настройка OpenBPM Engine в Tomcat: LDAP, кеширование REST API, cookie сессии и HTTP-заголовки безопасности веб-приложений.
LDAP
Чтобы пользователи и группы брались из LDAP, выполните два шага.
Библиотека LDAP
Убедитесь, что в $TOMCAT_HOME/lib есть файл openbpm-engine-identity-ldap-$PLATFORM_VERSION.jar. В готовом дистрибутиве он уже есть, шаг можно пропустить.
Настройка процессного движка
Добавьте в $TOMCAT_HOME/conf/bpm-platform.xml плагин LDAP и плагин прав администратора. В bpm-platform.xml готового дистрибутива эти плагины уже есть в закомментированном виде.
<?xml version="1.0" encoding="UTF-8"?>
<bpm-platform xmlns="http://www.operaton.org/schema/1.0/BpmPlatform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.operaton.org/schema/1.0/BpmPlatform http://www.operaton.org/schema/1.0/BpmPlatform ">
...
<process-engine name="default"> ...
<properties>...</properties>
<plugins>
<plugin>
<class>io.openbpm.bpm.identity.impl.ldap.plugin.LdapIdentityProviderPlugin</class>
<properties>
<property name="serverUrl">ldap://localhost:4334/</property>
<property name="managerDn">uid=jonny,ou=office-berlin,o=openbpm,c=io</property>
<property name="managerPassword">s3cr3t</property>
<property name="baseDn">o=openbpm,c=io</property>
<property name="userSearchBase"></property>
<property name="userSearchFilter">(objectclass=person)</property>
<property name="userIdAttribute">uid</property>
<property name="userFirstnameAttribute">cn</property>
<property name="userLastnameAttribute">sn</property>
<property name="userEmailAttribute">mail</property>
<property name="userPasswordAttribute">userpassword</property>
<property name="groupSearchBase"></property>
<property name="groupSearchFilter">(objectclass=groupOfNames)</property>
<property name="groupIdAttribute">ou</property>
<property name="groupNameAttribute">cn</property>
<property name="groupMemberAttribute">member</property>
</properties>
</plugin>
<plugin>
<class>io.openbpm.bpm.engine.impl.plugin.AdministratorAuthorizationPlugin</class>
<properties>
<property name="administratorUserName">admin</property>
</properties>
</plugin>
</plugins>
</process-engine>
</bpm-platform>
В свойстве administratorUserName укажите идентификатор пользователя LDAP, который получит права администратора. Под ним можно войти в веб-приложения и выдать права остальным пользователям.
Кеширование HAL-ресурсов
С LDAP имеет смысл включить кеширование пользователей и групп в веб-приложениях, чтобы реже обращаться к LDAP. Добавьте в WEB-INF/web.xml веб-приложения ($TOMCAT_HOME/webapps/openbpm-engine/WEB-INF/web.xml):
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!-- ... -->
<listener>
<listener-class>io.openbpm.bpm.engine.rest.hal.cache.HalRelationCacheBootstrap</listener-class>
</listener>
<context-param>
<param-name>io.openbpm.bpm.engine.rest.hal.cache.config</param-name>
<param-value>
{
"cacheImplementation": "io.openbpm.bpm.engine.rest.hal.cache.DefaultHalResourceCache",
"caches": {
"io.openbpm.bpm.engine.rest.hal.user.HalUser": {
"capacity": 100,
"secondsToLive": 900
},
"io.openbpm.bpm.engine.rest.hal.group.HalGroup": {
"capacity": 100,
"secondsToLive": 900
}
}
}
</param-value>
</context-param>
<!-- ... -->
</web-app>
Cookie сессии в веб-приложениях
Cookie сессии настраивается в дескрипторе веб-приложений WEB-INF/web.xml, в разделе:
...
<session-config>
<cookie-config>
<http-only>true</http-only>
<secure>false</secure>
</cookie-config>
</session-config>
...
Параметры безопасности cookie в session-config работают, только если версия дескриптора web.xml не ниже 3.0.
Атрибут SameSite выставляет фильтр SessionCookieFilter, он описан в том же файле:
...
<filter>
<filter-name>SessionCookieFilter</filter-name>
<filter-class>io.openbpm.bpm.webapp.impl.security.filter.SessionCookieFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>SessionCookieFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
...
По умолчанию фильтр выставляет SameSite=Lax. Поведение меняется параметрами фильтра:
...
<filter>
<filter-name>SessionCookieFilter</filter-name>
<filter-class>io.openbpm.bpm.webapp.impl.security.filter.SessionCookieFilter</filter-class>
<init-param>
<param-name>sameSiteCookieValue</param-name>
<param-value>Strict</param-value>
</init-param>
</filter>
...
Фильтр добавляет атрибут SameSite, только если у cookie его ещё нет, и не меняет уже выставленное значение.
Параметры фильтра:
| Параметр | Описание | По умолчанию |
|---|---|---|
|
При Если флаг |
|
|
При Если атрибут |
|
|
Значение атрибута
|
не задан |
|
Произвольное значение атрибута
|
не задан |
Фильтр обрабатывает cookie с именем из session-config (<cookie-config><name>), по умолчанию JSESSIONID.
Подробнее в разделе Безопасность cookie.
HTTP-заголовки безопасности в веб-приложениях
Заголовки безопасности выставляет фильтр HttpHeaderSecurityFilter, описанный в WEB-INF/web.xml веб-приложений:
...
<filter>
<filter-name>HttpHeaderSecurity</filter-name>
<filter-class>
io.openbpm.bpm.webapp.impl.security.filter.headersec.HttpHeaderSecurityFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>HttpHeaderSecurity</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
...
Поведение меняется параметрами фильтра, например:
...
<filter>
<filter-name>HttpHeaderSecurity</filter-name>
<filter-class>
io.openbpm.bpm.webapp.impl.security.filter.headersec.HttpHeaderSecurityFilter
</filter-class>
<init-param>
<param-name>contentSecurityPolicyValue</param-name>
<param-value>
base-uri 'self';
default-src 'self' 'unsafe-inline'
</param-value>
</init-param>
</filter>
...
Все параметры описаны в разделе Заголовки безопасности HTTP.
Документация создана на основе Camunda 7 Docs (Camunda, docs.camunda.org) и распространяется по лицензии Creative Commons Attribution-ShareAlike 3.0 Unported.