Keycloak - 如何获取某个领域的所有用户并将其保存到应用程序数据库?

Cha*_*lie 4 spring spring-boot keycloak

我正在使用 Spring Boot 构建 REST API,并使用 Keycloak 进行身份验证和授权。由于用户是由Keycloak管理的,所以我的应用程序数据库没有用户的数据。但我想将 Keycloak 中的用户实体的一些属性存储在我的应用程序数据库中,因为审计目的需要用户数据。

那么将应用程序数据库用户表与 keycloak 用户表同步的最佳方法是什么?

Boo*_*mer 5

我将实现一个基于EventListenerSpi 的Keycloak 插件。在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());
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

event.getRepresentation ()返回包含所有用户数据的 JSON 对象。当然,您必须通过 Keycloak 管理控制台(事件/配置/管理事件设置)打开管理事件才能完成此操作。将“保存事件”和“包括表示”都设置为“开”。