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

时间:2017-10-30 15:20:58

标签: spring spring-boot keycloak

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

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

1 个答案:

答案 0 :(得分:2)

我会基于 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());
    }
  }
}

event.getRepresentation()返回包含所有用户数据的JSON对象。 当然,您必须通过Keycloak管理控制台(事件/配置/管理事件设置)打开管理事件才能使其正常工作。 把两个&#34;保存事件&#34;和&#34;包括表示&#34;到ON。