Keycloak 26.0.0 版本發布

2024 年 10 月 04 日

要下載此版本,請前往 Keycloak 下載頁面

重點

組織支援

從 Keycloak 26 開始,完全支援組織功能。

用戶端程式庫更新

用戶端程式庫的專屬發布週期

從此版本開始,某些 Keycloak 用戶端程式庫的發布週期將獨立於 Keycloak 伺服器發布週期。26.0.0 版本可能是最後一次用戶端程式庫與 Keycloak 伺服器一起發布的版本。但從現在開始,用戶端程式庫可能會在與 Keycloak 伺服器不同的時間發布。

用戶端程式庫包含以下組件:

  • Java 管理用戶端 - Maven 組件 org.keycloak:keycloak-admin-client

  • Java 授權用戶端 - Maven 組件 org.keycloak:keycloak-authz-client

  • Java 政策強制執行器 - Maven 組件 org.keycloak:keycloak-policy-enforcer

未來可能會加入更多程式庫。

用戶端程式庫支援 Java 8,因此可以將其用於部署在較舊應用程式伺服器上的用戶端應用程式。

用戶端程式庫與伺服器的相容性

從此版本開始,我們將測試並支援與相同伺服器版本和先前幾個主要伺服器版本的用戶端程式庫。

有關用戶端程式庫與伺服器版本支援的詳細資訊,請參閱升級指南

預設持久化使用者工作階段

Keycloak 25 引入了 persistent-user-sessions 功能。啟用此功能後,所有使用者工作階段都會持久化到資料庫中,這與先前僅持久化離線工作階段的行為不同。在 Keycloak 26 中,此功能預設為啟用。這表示預設情況下,所有使用者工作階段都會持久化到資料庫中。

可以透過停用此功能將此行為還原為先前的狀態。有關更多詳細資訊,請參閱設定分散式快取指南中的「Volatile user sessions」章節。

有關如何升級的資訊,請參閱升級指南

新的預設登入主題

現在有一個新版本的(v2keycloak 登入主題,它提供了改進的外觀和風格,包括支援根據使用者偏好自動切換到深色主題。

先前的版本(v1)現在已棄用,並將在未來版本中移除。

對於所有新的 Realm,keycloak.v2 將是預設的登入主題。此外,任何從未明確設定登入主題的現有 Realm 也將切換到 keycloak.v2

高可用性多站點部署

Keycloak 26 對推薦的 HA 多站點架構進行了重大改進,最值得注意的是:

  • Keycloak 部署現在能夠同時在兩個站點處理使用者請求。

  • 現在需要主動監控站點之間的連線,以便在發生故障時更新站點之間的複寫。

  • 負載平衡器藍圖已更新為使用 AWS Global Accelerator,因為這樣可以避免用戶端 DNS 快取造成的長時間容錯移轉。

  • 持久化使用者工作階段現在是架構的要求。因此,使用者工作階段將保留在 Keycloak 或 Infinispan 升級中。

有關如何遷移的資訊,請參閱升級指南

管理員引導和復原

過去,當所有管理員使用者都被鎖定時,重新取得對 Keycloak 執行個體的存取權是一個具有挑戰性和複雜性的過程。Keycloak 意識到這些挑戰並旨在顯著增強使用者體驗,現在提供了幾種簡單的方法來引導臨時管理員帳戶並恢復遺失的管理員存取權。

現在可以使用特定選項執行 startstart-dev 命令來建立臨時管理員帳戶。此外,還引入了一個新的專用命令,允許使用者輕鬆地重新取得管理員存取權。

有關此主題的詳細說明和更多資訊,請參閱管理員引導和復原指南。

OpenTelemetry 追蹤預覽

底層 Quarkus 對 OpenTelemetry 追蹤的支援已公開給 Keycloak,並允許取得應用程式追蹤以提高可觀察性。它有助於發現效能瓶頸,確定應用程式故障的原因,追蹤分散式系統中的請求等等。此支援處於預覽模式,我們很樂意收到任何回饋。

有關更多資訊,請參閱啟用追蹤指南。

用於可驗證憑證發行的 OpenID

用於可驗證憑證發行(OID4VCI)的 OpenID 仍然是 Keycloak 中的實驗性功能,但在這個版本中得到了極大的改進。您可以在 Keycloak OAuth SIG 中找到重要的開發和討論。歡迎 Keycloak 社群的任何成員加入。

非常感謝 OAuth SIG 小組的所有成員參與此功能的開發和討論。特別感謝 Francis PouatchaPascal KnüppelTakashi NorimatsuIngrid KamgaStefan WiedemannThomas Darimont

DPoP 改進

DPoP(OAuth 2.0 示範擁有權證明)預覽功能已獲得改進。現在所有授權類型都支援 DPoP。在先前的版本中,此功能僅支援 authorization_code 授權類型。UserInfo 端點上也支援 DPoP 權杖類型。

非常感謝 Pascal Knüppel 的貢獻。

移除 GELF 日誌處理器

GELF 支援已被棄用一段時間,並且在此版本中已最終從 Keycloak 中移除。其他日誌處理器可用且完全支援用作 GELF 的替代品,例如 Syslog。有關詳細資訊,請參閱記錄指南

用於管理 REST API 的輕量級存取權杖

輕量級存取權杖現在可以用於管理 REST API。security-admin-consoleadmin-cli 用戶端現在預設使用輕量級存取權杖,因此這兩個用戶端現在已啟用「Always Use Lightweight Access Token」和「Full Scope Allowed」。但是,管理主控台中的行為應保持不變。如果您已對這兩個用戶端進行了變更,並且將它們用於其他目的,請務必小心。

Keycloak JavaScript 配接器現在是獨立的

Keycloak JavaScript 配接器現在是一個獨立的程式庫,因此不再從 Keycloak 伺服器靜態提供。目標是將程式庫與 Keycloak 伺服器分離,以便可以獨立重構程式庫,簡化程式碼並使其在未來更容易維護。此外,該程式庫現在沒有第三方依賴項,這使其更輕量級且更易於在不同環境中使用。

有關變更的完整明細,請參閱升級指南

已移除主機名稱 v1 功能

已移除已棄用的主機名稱 v1 功能。此功能在 Keycloak 25 中已棄用,並被主機名稱 v2 取代。如果您仍在使用此功能,則必須遷移到主機名稱 v2。有關更多詳細資訊,請參閱設定主機名稱 (v2)初始遷移指南

從根目錄自動重新導向到相對路徑

當指定 http-relative-path 屬性時,使用者會自動重新導向到 Keycloak 託管的路徑。這表示當相對路徑設定為 /auth 時,並且使用者存取 localhost:8080/,頁面會重新導向到 localhost:8080/auth

當指定 http-management-relative-pathhttp-relative-path 屬性時,管理介面也適用於此情況。

這改善了使用者體驗,因為使用者不再需要將相對路徑明確設定為 URL。

在重新啟動時保留撤銷的存取權杖

在此版本中,當使用嵌入式快取時,撤銷的存取權杖預設會寫入資料庫,並在重新啟動叢集時重新載入。

有關如何遷移的資訊,請參閱升級指南

用戶端策略中的用戶端屬性條件

基於用戶端屬性的條件已新增到用戶端策略中。您可以使用條件來指定具有指定用戶端屬性和指定值的用戶端。在評估此條件時,可以使用 AND 或 OR 條件,如用戶端策略的文件中所述。

非常感謝 Yoshiyuki Tabata 的貢獻。

為日誌處理器指定不同的日誌層級

可以為所有可用的日誌處理器指定日誌層級,例如 consolefilesyslog。更細化的方法能夠控制整個應用程式的記錄,並根據您的需求進行客製化。

有關更多資訊,請參閱記錄指南

已移除 Proxy 選項

已移除已棄用的 proxy 選項。此選項在 Keycloak 24 中已棄用,並在需要時被 proxy-headers 選項與主機名稱選項結合使用取代。有關更多詳細資訊,請參閱使用反向 Proxy初始遷移指南

新增 proxy-trusted-addresses 選項

當將 proxy-headers 選項設定為指定受信任的 Proxy 位址允許清單時,可以使用 proxy-trusted-addresses。如果給定請求的 Proxy 位址不受信任,則不會使用相應的 Proxy 標頭值。

新增 proxy-protocol-enabled 選項

proxy-protocol-enabled 選項控制伺服器在處理來自代理伺服器後方的請求時,是否應使用 HA PROXY 協議。當設定為 true 時,返回的遠端位址將會是實際連線用戶端的位址。

新增重新載入信任和金鑰資料的選項

https-certificates-reload-period 選項可以設定來定義金鑰儲存區、信任儲存區以及 https-* 選項引用的憑證檔案的重新載入週期。使用 -1 來停用重新載入。預設值為 1 小時。

新增設定快取最大計數的選項

可以設定 --cache-embedded-${CACHE_NAME}-max-count= 來定義指定快取中快取條目的上限。

https-trust-store-* 選項已取消不推薦使用

根據社群的回饋,我們決定取消不推薦使用 https-trust-store-* 選項,以便在信任憑證方面提供更好的精細度。

java-keystore 金鑰提供者支援更多演算法和 Vault 機密

java-keystore 金鑰提供者允許從外部 Java 金鑰儲存檔案載入領域金鑰,已修改為管理所有 Keycloak 演算法。此外,用於從儲存區檢索實際金鑰所需的金鑰儲存區和金鑰機密可以使用 Vault 進行設定。因此,Keycloak 領域可以將任何金鑰外部化到加密檔案,而無需將敏感資料儲存在資料庫中。

有關此主題的更多資訊,請參閱設定領域金鑰

新增對 ECDH-ES 加密金鑰管理演算法的支援

現在 Keycloak 允許將 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 設定為用戶端的加密金鑰管理演算法。使用橢圓曲線迪菲-赫爾曼暫時靜態(ECDH-ES)的金鑰協定規範為 JWT 引入了三個新的標頭參數:epkapuapv。目前,Keycloak 實作僅管理強制性的 epk,而其他兩個(可選)永遠不會新增到標頭中。有關這些演算法的更多資訊,請參閱JSON Web 演算法 (JWA)

此外,還新增了一個新的金鑰提供者 ecdh-generated,用於產生領域金鑰,並且在 Java KeyStore 提供者中新增了對 ECDH 演算法的支援。

非常感謝 Justin Tay 的貢獻。

支援在領域中有多個社交代理的實例

現在可以在一個領域中擁有多個相同社交代理的實例。

大多數情況下,一個領域不需要多個相同的社交代理實例。但由於引入了 organization 功能,應該可以將同一個社交代理的不同實例連結到不同的組織。

建立社交代理時,您現在應該像任何其他代理一樣提供一個 別名,並可選擇性地提供一個 顯示名稱

新的憑證通用事件類型

現在有通用的事件用於更新 (UPDATE_CREDENTIAL) 和移除 (REMOVE_CREDENTIAL) 憑證。憑證類型在事件的 credential_type 屬性中描述。電子郵件事件監聽器支援新的事件類型。

以下事件類型現在已過時,並將在未來版本中移除:UPDATE_PASSWORDUPDATE_PASSWORD_ERRORUPDATE_TOTPUPDATE_TOTP_ERRORREMOVE_TOTPREMOVE_TOTP_ERROR

base/loginkeycloak.v2/login 主題中的 template.ftl 檔案現在可以自訂登入框的頁尾。這可以用於顯示常用連結或在頁面結尾包含自訂腳本。

新的 footer.ftl 範本提供了一個 content 巨集,該巨集會在「登入框」的底部呈現。

Keycloak CR 支援標準排程選項

Keycloak CR 現在公開了用於控制 Keycloak Pod 排程的第一級屬性。

有關更多詳細資訊,請參閱Operator 高級設定

KeycloakRealmImport CR 支援佔位符替換

KeycloakRealmImport CR 現在公開了 spec.placeholders,以便在匯入時建立用於佔位符替換的環境變數。

有關更多詳細資訊,請參閱Operator 領域匯入

設定 LDAP 連線池

在此版本中,LDAP 連線池設定僅依賴於系統屬性。

有關更多詳細資訊,請參閱設定連線池

Infinispan 編組變更為 Infinispan Protostream

編組是將 Java 物件轉換為位元組,以便在 Keycloak 伺服器之間透過網路傳輸的過程。在 Keycloak 26 中,我們將編組格式從 JBoss 編組變更為 Infinispan Protostream。

警告
JBoss 編組和 Infinispan Protostream 彼此不相容,不正確的使用可能會導致資料遺失。因此,升級到此版本時,所有快取都會被清除。

Infinispan Protostream 基於 Protocol Buffers (proto 3),其優點是具有向後/向前相容性。

移除 OSGi 元資料

由於所有使用 OSGi 元資料的 Java 介面卡都已移除,我們已停止為我們的 jar 產生 OSGi 元資料。

為了提高群組的可擴展性,它們現在會在移除領域時直接從資料庫中移除。因此,當移除領域時,不再觸發群組相關事件(例如 GroupRemovedEvent)。

有關如何遷移的資訊,請參閱升級指南

領域表示中不再提供身分提供者

作為改進領域和組織在擁有許多身分提供者時的可擴展性的一部分,領域表示不再保留身分提供者的列表。但是,在匯出領域時,它們仍然可以從領域表示中取得。

有關如何遷移的資訊,請參閱升級指南

保護應用程式文件已轉換為指南格式

《保護應用程式和服務》文件已轉換為與先前版本中轉換的《伺服器安裝和設定》文件類似的新格式。該文件現在可在 Keycloak 指南下找到。

移除舊版 Cookie

Keycloak 不再傳送 _LEGACY Cookie,這些 Cookie 是作為解決較舊瀏覽器不支援 Cookie 上的 SameSite 標記的權宜之計而引入的。

_LEGACY Cookie 也用於另一個目的,即允許從不安全環境登入。雖然這在 Keycloak 的生產部署中完全不建議使用,但在 localhost 以外透過 http 存取 Keycloak 是相當常見的。作為 _LEGACY Cookie 的替代方案,Keycloak 現在不會設定 secure 標記,並且在偵測到使用不安全環境時,會設定 SameSite=Lax 而不是 SameSite=None

UserRepresentation 中的屬性 origin 已過時

UserRepresentation 中的 origin 屬性已過時,並計劃在未來版本中移除。

相反,建議使用 federationLink 屬性來取得使用者連結的提供者。

升級

升級前,請參閱移轉指南,以取得完整的變更清單。

所有已解決的問題

已過時的功能

新功能

增強功能

錯誤