Keycloak Admin REST-API Синхронизация сопоставителя федерации

Я использую Keycloak 9.0.3 с федерацией пользователей LDAP, с режимом редактирования = WRITABLE и Import Users = on. Я разрабатываю приложение для весенней загрузки, которое должно вызывать API REST Keycloak для создания, обновления и удаления пользователей и групп в LDAP. Я также создал "group-ldap-mapper" в моей пользовательской федерации, чтобы сопоставить LDAP-группы с Keycloak-группами и наоборот.

Мое требование - создавать и удалять группы Keycloak через REST API, и они сопоставляются с группами в LDAP с помощью указанного выше сопоставителя. Когда мое приложение вызывает POST /{realm}/groups, Keycloak просто создает группу в Keycloak-DB и не синхронизируется с LDAP, если группа не будет назначена какому-либо пользователю. На самом деле это не большая проблема. Настоящая проблема возникает, когда мое приложение удаляет группу с помощью DELETE /{realm} / groups / {id}. Группы удаляются из Keycloak-DB, но не из LDAP. Приемлемым обходным решением было бы вызвать POST /{realm}/user-storage/{parentId}/mappers/{id}/sync, который синхронизирует группы и выполняет работу.

Проблема в этом обходном пути заключается в том, что нет другого способа получить идентификатор сопоставителя федерации ({id}), кроме жесткого кодирования его в приложении Spring. REST-вызов для получения этого идентификатора программным способом отсутствует.

Есть идеи, как это решить?

1 ответ

Решение

Я выяснил, как программно найти идентификаторы федерации и group-ldap-mapper, чтобы использовать их в вызове POST /{realm}/user-storage/{parentId}/mappers/{id}/sync.

Можно вызвать GET /{realm}/components. Это возвращает, среди прочего, федерацию и картографы. В моем случае я мог найти идентификатор федерации в UserRepresentation, а затем использовал его для фильтрации компонентов (parent={federation id}). Согласно документации, также существует тип Query, но я не смог определить правильное значение.

Другие вопросы по тегам