![](/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.