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), чтобы это работало. Установите для обоих параметров "Сохранить события" и "Включить представление".

Другие вопросы по тегам