Keycloak 24.0用kcadm.sh创建用户后登录报错:Account is not fully set up
问题:Keycloak 24使用kcadm.sh创建用户后登录失败报错"Account is not fully set up"
环境与脚本情况
通过Docker Compose运行quay.io/keycloak/keycloak:${KEYCLOAK_VERSION}镜像,使用初始化脚本每次重新初始化容器(非升级场景)。当KEYCLOAK_VERSION=23.0时脚本执行正常,切换到KEYCLOAK_VERSION=24.0后,在重新配置领域管理员的步骤报错。
原初始化脚本:
#!/bin/sh set -xe export KEYCLOAK_HOME=/opt/keycloak PATH="$PATH:$KEYCLOAK_HOME/bin" cd "$KEYCLOAK_HOME"/bin REALM=testing DEFAULT_PASSWORD=admin_password HOST=keycloak PORT=8080 ./kcadm.sh config credentials \ --server http://$HOST:$PORT \ --realm master \ --user admin \ --password admin ./kcadm.sh create realms -s "realm=$REALM" -s "enabled=true" ADMIN_UID=$(./kcadm.sh create users -r $REALM -s "username=admin" -i) ./kcadm.sh add-roles -r $REALM --uusername admin --cclientid realm-management --rolename realm-admin ./kcadm.sh update users/"$ADMIN_UID" -r $REALM -s "enabled=true" ./kcadm.sh update users/"$ADMIN_UID"/reset-password -r $REALM -s type=password -s value=$DEFAULT_PASSWORD -n ############################################ # Reconfigure to use the created realm admin ############################################ ./kcadm.sh config credentials \ --server http://$HOST:$PORT \ --realm $REALM \ --user admin \ --password $DEFAULT_PASSWORD # setup roles # setup users # setup clients
报错信息
... keycloak-setup-1 | + ./kcadm.sh config credentials --server http://keycloak:8080 --realm testing --user admin --password admin_password keycloak-setup-1 | Logging into http://keycloak:8080 as user admin of realm testing keycloak-1 | 2024-05-24 11:48:34,509 WARN [org.keycloak.events] (executor-thread-1) type="LOGIN_ERROR", realmId="29bee3da-666d-4db5-a16e-558db391412b", clientId="admin-cli", userId="null", ipAddress="10.89.0.173", error="resolve_required_actions", auth_method="openid-connect", grant_type="password", client_auth_method="client-secret", username="admin" keycloak-setup-1 | Account is not fully set up [invalid_grant] keycloak-setup-1 exited with code 1 service "keycloak-setup" didn't complete successfully: exit 1
已尝试的无效操作
- 在更新用户的命令中添加
-s 'emailVerified=true' -s 'requiredActions=[]'参数,无效果 - 尝试添加
-s 'profileVerified=true',发现该属性不被支持
解决方案
问题出在Keycloak 24中reset-password命令默认将密码设置为临时密码,导致用户登录时需要完成修改密码的必填操作,即使后台界面未显示。只需在重置密码的命令中显式指定temporary=false即可解决:
修改后的重置密码命令:
./kcadm.sh update users/"$ADMIN_UID"/reset-password -r $REALM -s type=password -s value=$DEFAULT_PASSWORD -s temporary=false -n
完整的用户创建与配置步骤调整后如下:
ADMIN_UID=$(./kcadm.sh create users -r $REALM -s "username=admin" -i) ./kcadm.sh add-roles -r $REALM --uusername admin --cclientid realm-management --rolename realm-admin ./kcadm.sh update users/"$ADMIN_UID" -r $REALM -s "enabled=true" # 显式设置密码为非临时 ./kcadm.sh update users/"$ADMIN_UID"/reset-password -r $REALM -s type=password -s value=$DEFAULT_PASSWORD -s temporary=false -n
这样设置后,用户密码为永久有效,使用kcadm.sh config credentials登录时就不会触发必填操作的校验,可正常完成登录。
内容的提问来源于stack exchange,提问作者Bdot42
相关产品推荐
相关产品推荐

