Настройка

На странице описана дополнительная настройка 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 сессии настраивается в дескрипторе веб-приложений 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 его ещё нет, и не меняет уже выставленное значение.

Параметры фильтра:

Параметр Описание По умолчанию

enableSecureCookie

При true у cookie сессии включается флаг Secure.

Если флаг Secure уже выставлен другим способом, значение false его не снимает.

false

enableSameSiteCookie

При false фильтр не выставляет атрибут SameSite. Значение атрибута по умолчанию LAX, его меняют параметры sameSiteCookieOption и sameSiteCookieValue.

Если атрибут SameSite уже выставлен другим способом, параметр его не меняет и не удаляет.

true

sameSiteCookieOption

Значение атрибута SameSite: STRICT или LAX.

  • Не действует, если enableSameSiteCookie равен false.

  • Нельзя задавать вместе с sameSiteCookieValue.

  • Не меняет атрибут SameSite, выставленный другим способом.

не задан

sameSiteCookieValue

Произвольное значение атрибута SameSite.

  • Не действует, если enableSameSiteCookie равен false.

  • Нельзя задавать вместе с sameSiteCookieOption.

  • Не меняет атрибут SameSite, выставленный другим способом.

не задан

Фильтр обрабатывает cookie с именем из session-config (<cookie-config><name>), по умолчанию JSESSIONID.

Подробнее в разделе Безопасность cookie.

Заголовки безопасности выставляет фильтр 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.