管理員啟動和復原

學習如何啟動和復原管理員帳戶。

臨時管理員帳戶

使用以下描述的方法之一建立的使用者或服務管理員帳戶是臨時的。這表示該帳戶應僅在執行取得永久且更安全的管理員存取權限所需的操作時存在。之後,該帳戶需要手動移除。各種 UI/UX 元素,例如管理控制台警告橫幅、標籤和日誌訊息,將向 Keycloak 管理員指示該帳戶是臨時的。

在 Keycloak 啟動時啟動臨時管理員帳戶

Keycloak 的 startstart-dev 命令支援啟動臨時管理員使用者和管理員服務帳戶的選項。這些選項是標準組態選項,因此可以在任何組態來源中指定,例如環境變數或 CLI 參數。例如,以下範例示範如何使用 startstart-dev 命令以及 CLI 參數來分別啟動臨時管理員使用者和管理員服務帳戶

bin/kc.[sh|bat] start --bootstrap-admin-username tmpadm --bootstrap-admin-password pass
bin/kc.[sh|bat] start-dev --bootstrap-admin-client-id tmpadm --bootstrap-admin-client-secret secret

可以省略使用者名稱或客戶端 ID 值;如需更多資訊,請參閱下方的 預設值 章節。

這些選項的目的僅用於啟動臨時管理員帳戶。這些帳戶僅在主領域還不存在時 Keycloak 伺服器首次啟動時建立。這些帳戶始終在主領域中建立。若要復原遺失的管理員存取權限,請使用以下章節中描述的專用命令。

使用專用命令啟動管理員使用者或服務帳戶

即使在 Keycloak 首次啟動之前,也可以執行 bootstrap-admin 命令。請記住,在使用此命令之前,需要停止所有 Keycloak 節點。它的執行將觸發初始主領域的建立,因此,稍後在首次啟動伺服器時,將忽略用於啟動管理員使用者和服務帳戶的啟動選項。

此外,強烈建議使用與 Keycloak 伺服器啟動時相同的選項(例如,db 選項)執行專用命令。

如果您已使用 設定 Keycloak 中概述的 build 命令建立 Keycloak 的最佳化版本,請使用命令列選項 --optimized 讓 Keycloak 跳過組建檢查以加快啟動時間。執行此操作時,請從命令列中移除組建時間選項,並僅保留執行時間選項。

如果您不使用 --optimized,請記住 bootstrap-admin 命令會隱式地為您建立或更新最佳化的映像檔 - 如果您從與伺服器執行個體相同的機器執行命令,這可能會影響伺服器的下次啟動。

建立管理員使用者

若要建立臨時管理員使用者,請執行以下命令

bin/kc.[sh|bat] bootstrap-admin user

如果未指定其他參數和/或未設定相應的環境變數,系統會提示使用者輸入所需資訊。可以省略使用者名稱值以使用預設值。如需更多資訊,請參閱下方的 預設值環境變數 章節。

或者,可以直接在命令中指定參數

bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --password:env PASS_VAR

此命令會建立一個臨時管理員使用者,其使用者名稱為 tmpadm,密碼取自環境變數。

建立服務帳戶

在自動化情境中,臨時管理員服務帳戶可能是臨時管理員使用者更合適的替代方案。

若要建立臨時管理員服務帳戶,請執行以下命令

bin/kc.[sh|bat] bootstrap-admin service

同樣地,如果未設定相應的環境變數或其他參數,系統將提示使用者輸入所需資訊。可以省略客戶端 ID 值以使用預設值。如需更多資訊,請參閱下方的 預設值環境變數 章節。

或者,可以直接在命令中指定參數

bin/kc.[sh|bat] bootstrap-admin service --client-id tmpclient --client-secret:env=SECRET_VAR

此命令會建立一個臨時管理員服務帳戶,其客戶端 ID 為 tmpclient,密碼取自環境變數。

重新取得具有更高安全性的領域存取權限

對於遺失管理員存取權限的領域,可以強制執行無密碼、OTP 或其他進階驗證方法。在這種情況下,需要建立管理員服務帳戶才能復原遺失的領域管理員存取權限。建立服務帳戶後,需要對 Keycloak 執行個體進行驗證才能執行所有必要操作

bin/kcadm.[sh|bat] config credentials --server https://127.0.0.1:8080 --realm master --client <service_account_client_name> --secret <service_account_secret>

接下來,擷取 credentialId。在此範例中,OTP 憑證是相關的。使用以下命令取得 CredentialRepresentation 物件的陣列,並找到 type 設定為 otp 的物件

bin/kcadm.[sh|bat] get users/{userId}/credentials -r {realm}

最後,可以使用擷取的 ID 來移除進階驗證方法(在我們的案例中,為 OTP)

bin/kcadm.[sh|bat] delete users/{userId}/credentials/{credentialId} -r {realm}

預設值

對於啟動和專用命令情境,使用者名稱和客戶端 ID 都是可選的,使用者和服務帳戶的預設值分別為 temp-admin

停用參數提示

若要停用參數提示,可以使用 --no-prompt 參數。例如

bin/kc.[sh|bat] bootstrap-admin user --username tmpadm --no-prompt

如果未設定相應的環境變數,則命令將失敗,並顯示指出缺少所需密碼參數的錯誤訊息。

如果應省略使用者名稱或客戶端 ID,--no-prompt 參數會很有用。例如

bin/kc.[sh|bat] bootstrap-admin user --password:env PASS_VAR --no-prompt

這會建立一個具有預設使用者名稱的臨時管理員使用者,而不會提示確認。如需更多資訊,請參閱上方的 預設值 章節。

環境變數

對於 bootstrap-admin user 命令,使用者名稱和密碼都可以選擇性地設定為環境變數

bin/kc.[sh|bat] bootstrap-admin user --username:env <YourUsernameEnv> --password:env <YourPassEnv>

對於 bootstrap-admin service 命令,客戶端 ID 是可選的,預設值為 temp-admin,而用戶端密碼必須設定為環境變數

bin/kc.[sh|bat] bootstrap-admin service --client-id:env <YourClientIdEnv> --client-secret:env <YourSecretEnv>