Keycloak Admin REST-API 同步联邦映射器

Keycloak Admin REST-API Synchronize federation mapper

我将 Keycloak 9.0.3 与 LDAP 用户联盟一起使用,编辑模式 = WRITABLE 并且导入用户 = 打开。 我正在开发一个 spring 引导应用程序,它应该调用 Keycloak REST API 来创建、更新、删除 usersgroups 在 LDAP 中。我还在我的用户联合中创建了 "group-ldap-mapper" 以将 LDAP 组映射到 Keycloak 组,反之亦然。

我的要求是通过 REST API 创建和删除 Keycloak 组,然后使用上面的映射器将它们映射到 LDAP 中的组。当我的应用程序调用 POST /{realm}/groups 时,Keycloak 只会在 Keycloak-DB 中创建组,并且不会同步到 LDAP,除非该组被分配给某个用户。这其实不是什么大问题。 真正的问题是当我的应用程序通过 DELETE /{realm}/groups/{id} 删除组时。这些组将从 Keycloak-DB 中删除,但不会从 LDAP 中删除。 一个可接受的解决方法是调用 POST /{realm}/user-storage/{parentId}/mappers/{id}/sync 同步组并完成工作.

此解决方法中的问题是,除了在 spring 应用程序中对其进行硬编码外,无法获取联合映射器 ID ({id})。没有以编程方式检索此 ID 的 REST 调用。

知道如何解决这个问题吗?

我想出了如何以编程方式找到联邦和 group-ldap-mapper 的 ID,以便在调用中使用它们 POST /{realm}/user-storage/{parentId}/mappers/ {id}/同步。

可以调用 GET /{realm}/components。这 returns 除其他外联合会和映射器。在我的例子中,我可以从 UserRepresentation 中找到联合 ID,然后我用它来过滤组件 (parent={federation id})。根据文档,还有一个类型查询,但我无法找出正确的值。