Keycloak Hardcoded Group Mapper组无法同步回联邦LDAP求助
Keycloak LDAP组映射同步问题解决方案
1. 定位HardcodedLDAPGroupStorageMapper类位置
你要找的HardcodedLDAPGroupStorageMapper.java是Keycloak内置的LDAP联邦扩展类,不会以单独源码文件的形式存在于部署目录中,它被打包在keycloak-ldap-federation-<你的Keycloak版本号>.jar包中,所属包路径为org.keycloak.storage.ldap.mappers.membership.group。
你猜测的问题符合实际情况:该内置映射器默认只实现了用户注册时向KC侧添加分组的逻辑,onRegisterUserToLDAP(LDAPObject ldapUser, UserModel localUser, RealmModel realm)方法未实现将分组关联反向写入LDAP的逻辑,因此同步到LDAP的功能默认不支持。
2. 最优实现方案(无需修改内置Jar,兼容性更强)
推荐通过自定义LDAP存储映射器SPI实现需求,同时满足「仅对指定联邦客户端生效」「组关联同步回LDAP」两个要求,步骤如下:
- 新建Maven项目,引入与你部署版本完全一致的
keycloak-core、keycloak-server-spi、keycloak-ldap-federation依赖 - 继承
AbstractLDAPStorageMapper抽象类,重写核心生命周期方法:- 重写
onRegisterUserToLDAP方法,在方法内首先通过session.getContext().getClient()获取当前请求的客户端,仅当客户端ID匹配你指定的目标客户端时,才执行后续组映射逻辑 - 若需要支持用户属性更新时同步组关联,可同时重写
onUpdateUser方法
- 重写
- 在自定义映射器中实现LDAP侧组关联写入逻辑:首先获取目标LDAP组对象,将当前用户的DN写入LDAP组的成员属性(AD对应
member、OpenLDAP对应uniqueMember),调用LDAP存储provider的更新接口提交修改即可 - 将自定义代码打包为Jar,放入Keycloak部署目录的
providers文件夹,重启Keycloak后即可在LDAP联邦的映射器列表中选择你自定义的映射器,替换原有硬编码组映射器即可生效
注意:请提前确认LDAP绑定账号拥有修改目标组成员属性的权限,否则同步操作会抛出权限异常。
内容的提问来源于stack exchange,提问作者Emma
相关产品推荐
相关产品推荐

