我正在使用spring boot构建REST API,并且我正在使用Keycloak进行身份验证和授权。由于用户由Keycloak管理,我的应用程序数据库没有用户的数据。但是我想在我的应用程序数据库中存储来自Keycloak的User实体的一些属性,因为审计需要用户数据。
那么将应用程序数据库用户表与keycloak用户表同步的最佳方法是什么?
答案 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。