1

我们目前通过以下方式添加默认 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或类似的东西?

4

1 回答 1

1

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

./kcadm.sh get users

然后,从该命令的输出中,提取您想要设置为的用户的ID(让我们命名为让调用) 。<USER_ID>Email VerifiedON

然后,您只需要执行:

./ 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 响应中提取 user 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}'
于 2020-11-17T11:21:59.880 回答