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」章節。
有關如何升級的資訊,請參閱升級指南。
現在有一個新版本的(v2
)keycloak
登入主題,它提供了改進的外觀和風格,包括支援根據使用者偏好自動切換到深色主題。
先前的版本(v1
)現在已棄用,並將在未來版本中移除。
對於所有新的 Realm,keycloak.v2
將是預設的登入主題。此外,任何從未明確設定登入主題的現有 Realm 也將切換到 keycloak.v2
。
Keycloak 26 對推薦的 HA 多站點架構進行了重大改進,最值得注意的是:
Keycloak 部署現在能夠同時在兩個站點處理使用者請求。
現在需要主動監控站點之間的連線,以便在發生故障時更新站點之間的複寫。
負載平衡器藍圖已更新為使用 AWS Global Accelerator,因為這樣可以避免用戶端 DNS 快取造成的長時間容錯移轉。
持久化使用者工作階段現在是架構的要求。因此,使用者工作階段將保留在 Keycloak 或 Infinispan 升級中。
有關如何遷移的資訊,請參閱升級指南。
過去,當所有管理員使用者都被鎖定時,重新取得對 Keycloak 執行個體的存取權是一個具有挑戰性和複雜性的過程。Keycloak 意識到這些挑戰並旨在顯著增強使用者體驗,現在提供了幾種簡單的方法來引導臨時管理員帳戶並恢復遺失的管理員存取權。
現在可以使用特定選項執行 start
或 start-dev
命令來建立臨時管理員帳戶。此外,還引入了一個新的專用命令,允許使用者輕鬆地重新取得管理員存取權。
有關此主題的詳細說明和更多資訊,請參閱管理員引導和復原指南。
底層 Quarkus 對 OpenTelemetry 追蹤的支援已公開給 Keycloak,並允許取得應用程式追蹤以提高可觀察性。它有助於發現效能瓶頸,確定應用程式故障的原因,追蹤分散式系統中的請求等等。此支援處於預覽模式,我們很樂意收到任何回饋。
有關更多資訊,請參閱啟用追蹤指南。
用於可驗證憑證發行(OID4VCI)的 OpenID 仍然是 Keycloak 中的實驗性功能,但在這個版本中得到了極大的改進。您可以在 Keycloak OAuth SIG 中找到重要的開發和討論。歡迎 Keycloak 社群的任何成員加入。
非常感謝 OAuth SIG 小組的所有成員參與此功能的開發和討論。特別感謝 Francis Pouatcha、Pascal Knüppel、Takashi Norimatsu、Ingrid Kamga、Stefan Wiedemann 和 Thomas Darimont
DPoP(OAuth 2.0 示範擁有權證明)預覽功能已獲得改進。現在所有授權類型都支援 DPoP。在先前的版本中,此功能僅支援 authorization_code
授權類型。UserInfo 端點上也支援 DPoP 權杖類型。
非常感謝 Pascal Knüppel 的貢獻。
GELF 支援已被棄用一段時間,並且在此版本中已最終從 Keycloak 中移除。其他日誌處理器可用且完全支援用作 GELF 的替代品,例如 Syslog。有關詳細資訊,請參閱記錄指南。
輕量級存取權杖現在可以用於管理 REST API。security-admin-console
和 admin-cli
用戶端現在預設使用輕量級存取權杖,因此這兩個用戶端現在已啟用「Always Use Lightweight Access Token」和「Full Scope Allowed」。但是,管理主控台中的行為應保持不變。如果您已對這兩個用戶端進行了變更,並且將它們用於其他目的,請務必小心。
Keycloak JavaScript 配接器現在是一個獨立的程式庫,因此不再從 Keycloak 伺服器靜態提供。目標是將程式庫與 Keycloak 伺服器分離,以便可以獨立重構程式庫,簡化程式碼並使其在未來更容易維護。此外,該程式庫現在沒有第三方依賴項,這使其更輕量級且更易於在不同環境中使用。
有關變更的完整明細,請參閱升級指南。
已移除已棄用的主機名稱 v1 功能。此功能在 Keycloak 25 中已棄用,並被主機名稱 v2 取代。如果您仍在使用此功能,則必須遷移到主機名稱 v2。有關更多詳細資訊,請參閱設定主機名稱 (v2) 和初始遷移指南。
當指定 http-relative-path
屬性時,使用者會自動重新導向到 Keycloak 託管的路徑。這表示當相對路徑設定為 /auth
時,並且使用者存取 localhost:8080/
,頁面會重新導向到 localhost:8080/auth
。
當指定 http-management-relative-path
或 http-relative-path
屬性時,管理介面也適用於此情況。
這改善了使用者體驗,因為使用者不再需要將相對路徑明確設定為 URL。
基於用戶端屬性的條件已新增到用戶端策略中。您可以使用條件來指定具有指定用戶端屬性和指定值的用戶端。在評估此條件時,可以使用 AND 或 OR 條件,如用戶端策略的文件中所述。
非常感謝 Yoshiyuki Tabata 的貢獻。
可以為所有可用的日誌處理器指定日誌層級,例如 console
、file
或 syslog
。更細化的方法能夠控制整個應用程式的記錄,並根據您的需求進行客製化。
有關更多資訊,請參閱記錄指南。
已移除已棄用的 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 領域可以將任何金鑰外部化到加密檔案,而無需將敏感資料儲存在資料庫中。
有關此主題的更多資訊,請參閱設定領域金鑰。
現在 Keycloak 允許將 ECDH-ES、ECDH-ES+A128KW、ECDH-ES+A192KW 或 ECDH-ES+A256KW 設定為用戶端的加密金鑰管理演算法。使用橢圓曲線迪菲-赫爾曼暫時靜態(ECDH-ES)的金鑰協定規範為 JWT 引入了三個新的標頭參數:epk
、apu
和 apv
。目前,Keycloak 實作僅管理強制性的 epk
,而其他兩個(可選)永遠不會新增到標頭中。有關這些演算法的更多資訊,請參閱JSON Web 演算法 (JWA)。
此外,還新增了一個新的金鑰提供者 ecdh-generated
,用於產生領域金鑰,並且在 Java KeyStore 提供者中新增了對 ECDH 演算法的支援。
非常感謝 Justin Tay 的貢獻。
現在可以在一個領域中擁有多個相同社交代理的實例。
大多數情況下,一個領域不需要多個相同的社交代理實例。但由於引入了 organization
功能,應該可以將同一個社交代理的不同實例連結到不同的組織。
建立社交代理時,您現在應該像任何其他代理一樣提供一個 別名
,並可選擇性地提供一個 顯示名稱
。
現在有通用的事件用於更新 (UPDATE_CREDENTIAL
) 和移除 (REMOVE_CREDENTIAL
) 憑證。憑證類型在事件的 credential_type
屬性中描述。電子郵件事件監聽器支援新的事件類型。
以下事件類型現在已過時,並將在未來版本中移除:UPDATE_PASSWORD
、UPDATE_PASSWORD_ERROR
、UPDATE_TOTP
、UPDATE_TOTP_ERROR
、REMOVE_TOTP
、REMOVE_TOTP_ERROR
base/login
和 keycloak.v2/login
主題中的 template.ftl
檔案現在可以自訂登入框的頁尾。這可以用於顯示常用連結或在頁面結尾包含自訂腳本。
新的 footer.ftl
範本提供了一個 content
巨集,該巨集會在「登入框」的底部呈現。
KeycloakRealmImport CR 現在公開了 spec.placeholders
,以便在匯入時建立用於佔位符替換的環境變數。
有關更多詳細資訊,請參閱Operator 領域匯入。
編組是將 Java 物件轉換為位元組,以便在 Keycloak 伺服器之間透過網路傳輸的過程。在 Keycloak 26 中,我們將編組格式從 JBoss 編組變更為 Infinispan Protostream。
警告
|
JBoss 編組和 Infinispan Protostream 彼此不相容,不正確的使用可能會導致資料遺失。因此,升級到此版本時,所有快取都會被清除。 |
Infinispan Protostream 基於 Protocol Buffers (proto 3),其優點是具有向後/向前相容性。
由於所有使用 OSGi 元資料的 Java 介面卡都已移除,我們已停止為我們的 jar 產生 OSGi 元資料。
為了提高群組的可擴展性,它們現在會在移除領域時直接從資料庫中移除。因此,當移除領域時,不再觸發群組相關事件(例如 GroupRemovedEvent
)。
有關如何遷移的資訊,請參閱升級指南。
作為改進領域和組織在擁有許多身分提供者時的可擴展性的一部分,領域表示不再保留身分提供者的列表。但是,在匯出領域時,它們仍然可以從領域表示中取得。
有關如何遷移的資訊,請參閱升級指南。
《保護應用程式和服務》文件已轉換為與先前版本中轉換的《伺服器安裝和設定》文件類似的新格式。該文件現在可在 Keycloak 指南下找到。
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
屬性來取得使用者連結的提供者。
升級前,請參閱移轉指南,以取得完整的變更清單。