Keycloak管理员密码丢失

8

我在本地安装了Keycloak 12的测试版本,但不幸的是,我忘记了管理员密码,请问有没有办法重置密码或重置Keycloak配置而不会丢失领域?

我已经使用了add-user cli命令添加了用户,但即使使用该用户也无法访问。


这是您尝试的命令吗?sudo -u keycloak ./bin/add-user-keycloak.sh --user YourUser --password YourNewPass --realm YourRealm - mjr
是的,但我没有通过领域,因为我不知道哪一个是。我尝试使用Master和master,但都没有成功,返回一个错误,说领域不存在。没有领域,帐户被创建了,但我无法登录。 - pavants
哦,我想你需要了解你的领域,否则可能无法实现。 - mjr
3个回答

9
Keycloak的管理员用户仅在容器镜像的第一次初始化期间创建。一旦它被创建,环境变量KEYCLOAK_PASSWORD就没有影响了。重新启动Pod时,您可以在初始化日志中看到:
16:16:35,881 WARN  [org.keycloak.services] (ServerService Thread Pool -- 62) KC-SERVICES0104: Not creating user admin. It already exists.

要创建新的管理员用户,您应该在数据库中删除当前用户。或者,如果您喜欢,只需将管理员用户名更改为admin_bkp。之后,只需重新启动容器即可再次创建管理员用户。

连接到数据库

$ kubectl exec -it keycloak-database-bd94f668c-rvmbt -- bashbash-5.1$ psql $ keycloak -U postgre -W

删除或更新当前管理员用户:

psql (12.10)
Type "help" for help.
keycloak=# update  user_entity set "username"='admin_bkp' where "username"='admin';
UPDATE 1

删除应用程序pod。
$ kubectl delete pod keycloak-database-bd94f668c-rvmbt

现在你应该能够使用通过环境变量 KEYCLOAK_USER 和 KEYCLOAK_PASSWORD 传递的管理员用户登录。

1
kubectl exec -it KEYCLOAK_DB_POD -- bash -c "psql keycloak -U postgres -W" - Spanky
如果您想更加干净地完成此操作,您还需要删除“credentials”和“user_role_mapping”表中的相关记录。 - Anwar Benhamada
1
这太棒了!!谢谢你 - Cory Kleiser

9

对于我来说,我需要在user_entity表中找到用户。然后删除相关表中的行。完成这些操作后,我重新启动了Pod,管理员用户登录变成了通过环境变量KEYCLOAK_USER和KEYCLOAK_PASSWORD传递的用户。

查找用户ID

select * from user_entity

删除行

delete from credential where user_id = '<user-id>';
delete from user_role_mapping where user_id = '<user-id>';
delete from user_entity where id = '<user-id>';

5
如果您正在使用Keycloak Docker镜像,您可以使用docker inspect获取管理员凭据:
docker inspect <keycloak_container_id>

然后搜索 Config > Env,您会发现 KEYCLOAK_USER 和 KEYCLOAK_PASSWORD。


1
需要注意的是,如果您已更改密码,则Keycloak不会将其重置为KEYCLOAK_PASSWORD中的密码。 - tunaranch
不知道为什么,但对我来说有效。 - madhairsilence

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接