Коннектор UniBPM: Keycloak (unibpm-external-task-keycloak)
Назначение
Модуль unibpm-external-task-keycloak предоставляет коннектор
UniBPM для взаимодействия BPMN‑процессов с системой управления
идентификацией Keycloak через механизм External Task.
Коннектор позволяет процессам:
- получать данные пользователя
- искать пользователя по username
- получать группы пользователя
- получать информацию о группе
- получать участников группы
Модуль выполняется сервисом Integration Runtime, который получает задания из Kafka‑топиков UniBPM.
Архитектура
BPMN Service Task
→ UniBPM Engine
→ Kafka Topic (external-task.jobs.*)
→ Integration Runtime
→ Handler коннектора Keycloak
→ Keycloak Admin REST API
Компонент Назначение
UniBPM Engine публикует задания External Task Integration Runtime выполняет обработчики коннекторов KeycloakClient HTTP‑клиент для Keycloak Handlers реализуют конкретные действия коннектора
Поддерживаемые действия
Action Описание
user.get Получить пользователя по ID
user.getByUsername Найти пользователя по username
user.groups Получить группы пользователя
group.get Получить группу по ID
group.members Получить участников группы
group.getByName Найти группу по name
Общие extension properties
Каждый BPMN Service Task должен определять следующие свойства:
Свойство Обязательное Описание
uni.connector ✔ имя коннектора (keycloak)
uni.action ✔ выполняемое действие
uni.version ✔ версия коннектора
kc.result ✖ имя переменной процесса для результата
kc.select ✖ фильтрация атрибутов результата
Фильтрация результата (kc.select)
Свойство kc.select позволяет возвращать только выбранные поля
ответа Keycloak.
Фильтрация работает как whitelist‑проекция атрибутов.
Пример
Ответ Keycloak:
{
"id": "123",
"username": "ivanov",
"email": "ivanov@reunico.com"
}
Конфигурация BPMN:
kc.select = id,email
Результат:
```json
{
"id": "123",
"email": "info@reunico.com"
}
Вложенные атрибуты
Поддерживается выбор вложенных полей:
kc.select = id,attributes.signerFullName
Результат:
{
"id": "123",
"attributes": {
"signerFullName": "Seva Ivanov"
}
}
Работа со списками
Если ответ содержит массив объектов, фильтрация применяется к каждому элементу.
Пример:
kc.select = id,email
Результат:
[
{
"id": "1",
"email": "a@company.com"
},
{
"id": "2",
"email": "b@company.com"
}
]
Действия
user.get
Получить пользователя по ID.
Extension properties
Свойство Обязательное Описание
kc.userId ✔ ID пользователя Keycloak
kc.result ✖ имя переменной результата
kc.select ✖ фильтрация результата
Пример
uni.connector = keycloak
uni.action = user.get
uni.version = v1
kc.userId = ${userId}
kc.result = userData
user.getByUsername
Получить пользователя по username.
Extension properties
Свойство Обязательное Описание
kc.username ✔ username пользователя
kc.result ✖ переменная результата
kc.select ✖ фильтрация результата
Пример:
uni.connector = keycloak
uni.action = user.getByUsername
uni.version = v1
kc.username = ${initiator}
user.groups
Получить группы пользователя.
Extension properties
Свойство Обязательное Описание
kc.userId ✔ ID пользователя
kc.result ✖ переменная результата
kc.select ✖ фильтрация результата
Результат:
kc.groups = List<KeycloakGroup>
group.get
Получить группу по ID.
Extension properties
Свойство Обязательное Описание
kc.groupId ✔ ID группы
kc.result ✖ переменная результата
kc.select ✖ фильтрация результата
group.getByName
Получить группу по имени.
Extension properties
Свойство Обязательное Описание
kc.groupName ✔ ID группы
kc.result ✖ переменная результата
kc.select ✖ фильтрация результата
group.members
Получить участников группы.
Extension properties
Свойство Обязательное Описание
kc.groupId ✔ ID группы
kc.first ✖ offset
kc.max ✖ limit
kc.result ✖ переменная результата
kc.select ✖ фильтрация результата
BPMN ошибки
Некоторые ошибки коннектора преобразуются в BPMN Error.
Код Описание
KC_USER_NOT_FOUND пользователь не найден
KC_GROUP_NOT_FOUND группа не найдена
Пример BPMN Service Task
uni.connector = keycloak
uni.action = user.groups
uni.version = v1
kc.userId = ${initiator}
kc.result = groups
kc.select = id,name
Результат:
[
{ "id": "...", "name": "Managers" },
{ "id": "...", "name": "HR" }
]
Требования
Сервис‑аккаунт Keycloak должен иметь следующие роли:
realm-management
manage-users
view-users
query-groups
Технологии
- Java 17
- Spring Boot
- OpenFeign
- Kafka
- Jackson
- Keycloak Admin REST API