Keycloak 15开启TOTP后admin-cli登录失败如何解决?
Keycloak 15版本开启TOTP后admin-cli登录解决方案
问题原因
Keycloak 15.0.x版本的kcadm.sh工具原生未在config credentials子命令中支持TOTP参数传入,你尝试添加的--totp、--otp等参数均不被该版本识别,因此会返回用户名密码校验失败的报错。该功能直到Keycloak 20及以上版本才被官方加入。
可行解决方案
方案1:手动获取token后配置到kcadm(适合临时使用)
- 用curl调用密码授权流接口,传入TOTP参数获取访问凭证:
curl -X POST http://localhost:8080/auth/realms/master/protocol/openid-connect/token \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "username=admin" \ -d "password=<替换为你的管理员密码>" \ -d "grant_type=password" \ -d "client_id=admin-cli" \ -d "totp=<替换为你当前的6位TOTP动态验证码>"
请求成功后会返回包含access_token、refresh_token的响应内容。
2. 将拿到的access_token配置到kcadm即可正常使用:
sh ./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --user admin --token <替换为上一步获取的access_token>
方案2:启用admin-cli服务账号(适合自动化脚本使用)
无需每次传入密码和TOTP,长期有效:
- 登录Keycloak Web管理后台,进入master realm的「客户端」页面,找到
admin-cli客户端 - 开启「服务账号启用」选项并保存配置
- 切换到「服务账号角色」标签页,为该服务账号分配master realm的
realm-admin管理员权限 - 后续直接用客户端凭证流登录即可:
sh ./kcadm.sh config credentials --server http://localhost:8080/auth --realm master --client admin-cli --client-secret <替换为admin-cli客户端的密钥>
内容的提问来源于stack exchange,提问作者Cedric Guindon
相关产品推荐
相关产品推荐

