![](/img/trans.png)
[英]How can I update keycloak's user details programmatically (java), without using rest admin 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();
}
这不会导致错误,但未设置所需的操作。 在注册期间,我还通过单独的请求设置了领域角色,并且工作正常。
有谁知道为什么请求不抛出错误但未设置操作?
我已在用户所需的操作中将 admin-client 设置为 realm-admin。
我还不能使用我的 smtp 服务器,所以没有在 keycloak 中注册,但我希望至少设置了该字段。 还是仅在注册 smtp 时才可用?
此外:
我对客户也有一种非常奇怪的行为。 当我使用 webClient.exchange 设置领域角色时,它工作正常。 当我使用 .retrieve() 时,未设置领域角色。 我为所需的操作尝试了两种解决方案,但没有任何变化。
如果您只想强制用户更新密码而不使用电子邮件功能,那么您可以从以下位置更改您的 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
;Host
: smtp.gmail.com
;SSL
使用TLS
或465
,请将端口设置为587
;Enabled TLS
或Enabled SSL
设置为ON
之一;Enabled authentication
: ON
。
Username
和Password
设置为您将用于代表 keycloak 发送电子邮件的电子邮件帐户及其密码。可以在此处找到更详细的信息。
我刚刚做了一个测试运行,在我的例子中,我从 Keycloak Admin 用户那里请求了一个令牌,并在PUT
请求的正文中使用了管理员的访问令牌到端点:
{realm}/users/{id}/execute-actions-email
使用 JSON 内容'[UPDATE_PASSWORD]'
,然后我按照以下步骤配置了我的领域的smtp
。
最后,我收到了一封来自我的 Keycloak 配置电子邮件的电子邮件,其中包含以下消息:
我们的管理员刚刚要求您通过 > 执行以下操作来更新您的 DeepUnity 帐户:更新密码。 单击下面的链接以 > 开始此过程。
此链接将在 12 小时内失效。
如果您不知道您的管理员已要求这样做,请忽略此消息,不会有任何更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.