0

我正在使用带有 LDAP 用户联合的 Keycloak 9.0.3,编辑模式 = WRITABLE 并且导入用户 = on。我正在开发一个 Spring Boot 应用程序,它应该调用 Keycloak REST API 来创建、更新、删除LDAP 中的用户。我还在我的用户联合中创建了“group-ldap-mapper”,以将 LDAP-Groups 映射到 Keycloak-Groups,反之亦然。

我的要求是通过 REST API 创建和删除 Keycloak-groups,并使用上面的映射器将它们映射到 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})。没有 REST-Call 以编程方式检索此 id。

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

4

1 回答 1

1

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

可以调用 GET /{realm}/components。这将返回联合和映射器等内容。在我的例子中,我可以从 UserRepresentation 中找到联合 ID,然后我用它来过滤组件(父级={联合 ID})。根据文档,还有一个类型 Query,但我无法找出正确的值。

于 2020-04-27T19:53:27.320 回答