簡體   English   中英

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();
    }

這不會導致錯誤,但未設置所需的操作。 在注冊期間,我還通過單獨的請求設置了領域角色,並且工作正常。

有誰知道為什么請求不拋出錯誤但未設置操作?

我已在用戶所需的操作中將 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
  • 根據您的需要填寫設置。 對於 Gmail:
    • Hostsmtp.gmail.com
    • 如果SSL使用TLS465 ,請將端口設置為587
    • 將選項Enabled TLSEnabled SSL設置為ON之一;
    • Enabled authenticationON
      • 分別將UsernamePassword設置為您將用於代表 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM