使用 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}'
我们目前通过以下方式添加默认的 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}'