我在 Centos 上使用独立的 Keycloak 4.5.0 版本,为 Web 应用程序提供带有 LDAP 的安全登录。
它工作成功,但是当有人按下Keycloak管理面板上的"取消链接用户"按钮后>用户联合>LDAP时,任何人都无法使用LDAP用户名和密码登录,因为它给出了"用户名或密码错误"错误。
我尝试按下"同步所有用户"按钮,但没有变化。所以我从服务器重新启动了 keycloak 应用程序,但问题没有改变。
我检查了 keycloak 的服务器日志,它给出了:
11:22:51,152 错误 [org.keycloak.events.EventBuilder](默认任务-1(事件侦听器"用户"已注册,但找不到提供程序。
因此,请帮助我解决此登录问题,并提供有关"取消链接用户"按钮的信息。
感谢响应。
keycloak 无法从 ldap 获取密码。取消链接过程后,无法再检查密码,登录将失败。您必须为用户设置"密码重置操作",以让他们指定一个新操作。
可以在此处找到迁移用户的有趣方法:零停机时间迁移到Keycloak
显然,可以通过数据库手动重新链接用户:
- 转到
COMPONENT
表,然后找到 LDAP 的配置名称用户联合中的配置。复制身份证 - 转到您的
USER_ENTITY
表并查询您想要的帐户恢复 - 在帐号数据的
FEDERATION_LINK
列中,粘贴组件标识 - 通过点击用户中的"同步所有用户"按钮进行验证联合身份验证配置页
基于REALM_ID
从表中查找联合身份验证 ID 的示例查询COMPONENT
查询:SELECT id FROM COMPONENT WHERE NAME = '<mapper-ldap-name>' AND REALM_ID = '<realm-name>';
。
REALM_ID
查询更新USER_ENTITY
federation_link列的示例查询: UPDATE USER_ENTITY SET FEDERATION_LINK = '<federation-id>' WHERE REALM_ID = '<realm-name>';
我们通过使用这样的 shell 脚本删除除管理员以外的所有用户,然后"同步所有用户"来解决它。如果您仍具有管理员访问权限,也可以通过 UI 删除它们。
kcadm=/opt/keycloak/bin/kcadm.sh
$kcadm config credentials --server http://localhost:8080/auth --realm master --user admin
for x in $($kcadm get users -r myrealm|jq -r '.[].id'); do $kcadm delete users/$x -r myrealm; done