使用 add-user-keycloak.sh 添加新用户时如何验证用户的电子邮件?

How to verify a user's email when adding a new user with add-user-keycloak.sh?

我们目前通过以下方式添加默认的 Keycloak 用户:

/opt/jboss/keycloak/bin/add-user-keycloak.sh -r realm-name -u admin@test.com -p admin

但是,当我尝试生成这样的不记名令牌时:

curl --location --request POST 'http://auth.server-name.localhost/auth/realms/realm-name/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=password' \
--data-urlencode 'username=admin@test.com' \
--data-urlencode 'password=admin' \
--data-urlencode 'client_id=my-clien-id'

我收到以下错误响应:

{"error":"invalid_grant","error_description":"Account is not fully set up"}

通过搜索我发现这是由于用户电子邮件未被验证。

有什么方法可以验证用户,也许是通过将 emailVerified 参数传递给 add-user-keycloak.sh 或类似的东西?

由于这将在测试环境中使用,您可以使用Keycloak Admin CLI tool。脚本在 Linux 中 kcadm.sh 和 Windows 中 kcadm.bat,都在 Keycloak 的独立安装文件夹 bin 下。首先,您需要获取用户列表:

./kcadm.sh get users

然后,从该命令的输出中,提取要将 Email Verified 设置为 ID(让我们命名为 <USER_ID>)的用户=21=].

然后,你只需要执行:

./ kcadm.sh update users/<USER_ID> -s 'emailVerified=true'

另一种选择是使用 Keycloak Admin REST API

第一步是获取管理员令牌,以便您可以调用 Rest API:

curl    -d "client_id=admin-cli" \
        -d "username=$ADMIN_NAME" \
        -d "password=$ADMIN_PASSWORD" \
        -d "grant_type=password" \
        https://$KEYCLOAK_IP/auth/realms/master/protocol/openid-connect/token

您将获得带有管理员令牌的 json response。从该响应中提取 访问令牌 (让我们调用 $ACCESS_TOKEN)。

其次,您需要获取用户 ID,我们调用 $USER_ID.

curl -X GET https://$KEYCLOAK_IP/auth/admin/realms/$USER_REALM/users/?username=$USERNAME \
    -H "Content-Type: application/json" \
    -H "Authorization: bearer $ACCESS_TOKEN"

从 json 响应中提取用户 ID,并通过调用更改电子邮件验证:

curl -k -sS -X PUT https://$KEYCLOAK_IP/auth/admin/realms/$USER_REALM/users/$USER_ID \
        -H "Content-Type: application/json" \
        -H "Authorization: bearer $ACCESS_TOKEN" \
        -d '{"emailVerified":true}'