Keycloak - Как получить всех пользователей для царства и сохранить их в базе данных приложения?
Я строю REST API с весенней загрузкой, а для аутентификации и авторизации я использую Keycloak. Поскольку пользователями управляет Keycloak, база данных моего приложения не содержит данных пользователей. Но я хочу сохранить некоторые атрибуты сущности User из Keycloak в моей базе данных приложения, так как данные пользователя будут необходимы для целей аудита.
Итак, как лучше всего синхронизировать пользовательскую таблицу базы данных приложения с пользовательской таблицей keycloak?
1 ответ
Я бы реализовал плагин Keycloak на основе EventListenerSpi. В реализации EventListenerProvider вы можете сосредоточиться только на событиях администрирования пользователей.
public class SyncEventListener implements EventListenerProvider
{
private static final List<OperationType> SYNC_OPERATIONS = Arrays.asList(OperationType.CREATE, OperationType.UPDATE, OperationType.DELETE);
@Override
public void close() {}
@Override
public void onEvent(Event event) {}
@Override
public void onEvent(AdminEvent event, boolean includeRepresentation)
{
if ((event.getResourceType() == ResourceType.USER) && SYNC_OPERATIONS.contains(event.getOperationType()) )
{
// Write user data to external message queue or database
externalStore.write(event.getOperationType(), event.getRepresentation());
}
}
}
Event.getRepresentation() возвращает объект JSON со всеми пользовательскими данными. Конечно, вы должны включить административные события через консоль администратора Keycloak (Events/Config/Admin Events Settings), чтобы это работало. Установите для обоих параметров "Сохранить события" и "Включить представление".