Keycloak admin rest api:未设置更新密码

Keycloak admin rest api: Update password not set

我使用 Keycloak 11,在用户注册过程中,我想触发一封电子邮件,要求用户设置密码。 我已经用 restTemplate 和 keycloak 6 实现了它并且工作正常。 现在我使用推荐的webClient。

@Override
    public void triggerRequiredActionUpdatePassword(String userId) {
        String url = applicationConstants.getKeykloakUsersUri()+ "/" + userId + "/execute-actions-email";
        String[] actions = new String[]{"UPDATE_PASSWORD"};
        webClient.put()
                .uri(url)
                .contentType(MediaType.APPLICATION_JSON)
                .body(BodyInserters.fromValue(actions))
                .exchange()
                .block();
    }

这不会导致错误,但未设置所需的操作。 在注册过程中,我还通过单独的请求设置了领域角色,它工作正常。

有谁知道为什么请求没有抛出错误但没有设置操作?

我在用户要求的操作中将管理客户端设置为领域管理。

我还不能使用我的 smtp 服务器,所以在 keycloak 中注册了 none,但我希望至少该字段已设置。还是只有注册了smtp才能使用?

另外:

我还遇到了一个非常奇怪的客户行为。当我使用 webClient.exchange 设置领域角色时,它工作正常。当我使用 .retrieve() 时,未设置 realmrole。 我针对所需的操作尝试了两种解决方案,但没有任何变化。

如果您只想强制用户更新密码而不使用电子邮件功能,那么您可以将 URL 更改为:

 String url = applicationConstants.getKeykloakUsersUri()+ "/" + userId + "/execute-actions-email";

至:

 String url = applicationConstants.getKeykloakUsersUri()+ "/" + userId;

并在请求正文中发送一个 JSON 如:

{"id":"<YOUR_USER_ID>","requiredActions":["UPDATE_PASSWORD"]}

对于电子邮件选项,您需要在您的领域中配置 smtp

  • 转到您的 Realm 并单击 realm settings
  • 切换到 Email tab;
  • 根据需要填写设置。对于 Gmail:
    • Host : smtp.gmail.com;
    • 如果为 SSL 使用 TLS465,请将端口设置为 587
    • 设置为 ON Enabled TLSEnabled SSL 选项之一;
    • Enabled authentication : ON
      • 分别将 UsernamePassword 设置为您将用来代表 keycloak 发送电子邮件的电子邮件帐户及其密码。

可以找到更详细的信息here

我刚刚做了一个测试 运行,在我的例子中,我已经从 Keycloak 管理员用户那里请求了一个令牌,并在 PUT 请求的正文中使用了管理员的访问令牌端点:

{realm}/users/{id}/execute-actions-email

和 JSON 内容 '[UPDATE_PASSWORD]',然后我按照这个 steps.

配置了我领域的 smtp

最后,我收到了一封来自我的 Keycloak 配置电子邮件的电子邮件,其中包含以下消息:

our administrator has just requested that you update your DeepUnity account by > performing the following action(s): Update Password. Click on the link below to > start this process.

Link to account update

This link will expire within 12 hours.

If you are unaware that your administrator has requested this, just ignore this message and nothing will be changed.