Keycloak 22.0.0 版本發布

2023 年 7 月 11 日

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

版本說明

伺服器發行版本

移除 Java 11 支援

不再支援使用 Java 11 執行 Keycloak 伺服器。Java 11 在 Keycloak 21 中已宣告為棄用,並計畫在 Keycloak 22 中移除。

升級至 Quarkus 3.x

Keycloak 已升級至 Quarkus Java 框架的 3.2.0.Final 版本。Quarkus 3.x 延續了推動 Java 開發的傳統,透過快速行動並提供最新的技術來提供尖端的用戶體驗。

從 Java EE 過渡到 Jakarta EE

作為升級到 Quarkus 3.x 的一部分,Keycloak 將其程式碼庫從 Java EE(企業版)遷移到其後繼者 Jakarta EE,這為 Keycloak 帶來了各種變化。我們已升級所有 Jakarta EE 規範,以支援 Jakarta EE 10。

不再對 JAX-RS 資源啟用上下文和依賴注入

為了提供更好的運行時並盡可能利用底層堆疊,所有使用 javax.ws.rs.core.Context 註解的上下文資料注入點都已移除。預期的效能提升包括不再在請求生命週期中多次建立代理實例,並大幅減少運行時的反射程式碼量。

升級至 Hibernate ORM 6

Keycloak 現在受益於升級到 Hibernate ORM 6.2,其中包括效能提升、更好的 SQL、現代 JDK 支援以及對現代 RDBMS 功能的支援。

Elytron 憑證儲存區取代

先前已移除的 WildFly 發行版本提供了一個內建的密碼庫提供者,可從金鑰儲存區支援的 Elytron 憑證儲存區讀取密碼。由於此功能不再可用,我們新增了一個名為 Keycloak KeyStore Vault 的 Keycloak Vault SPI 新實作。顧名思義,此實作會從 Java 金鑰儲存區檔案讀取密碼。這些密碼隨後可用於管理控制台的多個位置。如需更多詳細資訊,請參閱我們的指南和最新的文件

新增金鑰儲存區配置來源

關於金鑰儲存區密碼庫的新聞,我們還整合了 Quarkus 最近發布的功能,稱為金鑰儲存區配置來源。這表示,除了現有的組態來源(CLI 參數、環境變數和檔案)之外,您現在還可以透過儲存在 Java 金鑰儲存區檔案中的組態屬性來設定您的 Keycloak 伺服器。您可以在組態指南中瞭解有關此功能的更多資訊。

主機名稱偵錯工具

由於許多使用者在正確設定伺服器的主機名稱時遇到問題,現在有一個新的協助工具可以偵錯組態。

Passthrough 代理模式變更

使用 Keycloak 的 --proxy 組態設定且模式為 passthrough 的安裝,應檢閱文件,因為此模式的行為已變更。

匯出和匯入執行自動建置

在先前的版本中,exportimport 命令需要先執行 build 命令。從此版本開始,如果建置時間組態已變更,則 exportimport 命令會執行 Keycloak 的自動重建。

管理控制台

移除帳戶控制台 v1

舊的帳戶控制台 (v1) 現已完全移除。此版本的帳戶控制台在 Keycloak 12 中被標記為已棄用。

帳戶控制台 v3 升級為預覽版

在 Keycloak 的 21.1.0 版本中,新的帳戶控制台(第 3 版)已作為實驗性功能推出。從這個版本開始,它已升級為預覽功能。

已移除帳戶控制台範本變數

暴露給帳戶控制台 V2 和 V3 範本的兩個變數(isEventsEnabledisTotpConfigured)未使用,並在此版本中已移除。

如果開發人員擴充了帳戶控制台主題,他或她可能會使用這些變數。因此,如果您正在擴充基本主題,請確保不再使用這些變數。

自訂管理控制台訊息的變更

管理控制台(以及即將推出的新帳戶控制台)在解析國際化訊息的鍵時,與 Keycloak 的其他部分略有不同。這是因為它使用 i18next 庫進行國際化。因此,當在「領域設定」➡「本地化」下為管理控制台定義自訂訊息時,必須考慮 i18next 的最佳實務。特別是,當為管理控制台定義訊息時,在訊息的鍵中指定命名空間非常重要。

例如,假設我們要覆寫在建立新領域時向使用者顯示的 welcome 訊息。此訊息位於 dashboard 命名空間中,與包含訊息的原始檔案名稱相同(dashboard.json)。如果我們想要覆寫此訊息,我們必須使用命名空間作為字首,然後用冒號分隔訊息的鍵,在此案例中,它將變成 dashboard:welcome

JavaScript 轉接器

已移除舊版 Promise API

在此版本中,我們已從 Keycloak JS 轉接器中移除舊版 Promise API 方法。這表示無法再對從轉接器傳回的 Promise 呼叫 .success().error()

必須使用 new 運算子執行個體化

在先前的版本中,當 Keycloak JS 轉接器在沒有 new 運算子的情況下建構時,我們開始主動記錄棄用警告。從此版本開始,這樣做將會擲回例外。這是為了與 JavaScript 類別的預期行為保持一致,這將允許在未來進一步重構轉接器。

管理 API

已重新命名管理程式庫成品

在升級到 Jakarta EE 之後,Keycloak 管理用戶端的成品已重新命名為更具描述性的名稱,並考慮到長期維護性。我們仍然提供兩個獨立的 Keycloak 管理用戶端,一個支援 Jakarta EE,另一個支援 Java EE。

支援根據自訂屬性計數使用者

User API 現在支援根據自訂屬性查詢使用者數量。為此,在 /{realm}/users/count 端點中新增了一個新的 q 參數。

q 參數預期採用以下格式 q=<name>:<value> <name>:<value>。其中 <name><value> 分別代表屬性名稱和值。

運算子

k8s.keycloak.org/v2alpha1 變更

keycloak.status 中有額外的可用欄位,以方便將 keycloak 作為可擴展的資源。還有額外的欄位使狀態更容易解釋,例如 observedGeneration 和條件 observedGeneration 和 lastTransitionTime 欄位。

條件狀態欄位從布林值變更為字串,以符合標準 Kubernetes 條件。在 CRD 中,它將暫時表示為接受任何內容,但它只會是字串。請確保您對此欄位的任何使用已更新為預期值為 "True"、"False" 或 "Unknown",而不是 true 或 false。

運算子資源的共同管理

在需要進階管理的情況下,您現在可以直接更新運算子管理的資源上的大多數欄位,這些欄位不是由運算子直接設定的。這可以用來替代 Keycloak 規格中不受支援的節點。與不受支援的節點一樣,這些直接修改不被視為受支援。如果您的修改阻止運算子管理資源,則 Keycloak CR 將顯示此錯誤條件,並且運算子將記錄它。

身分代理

OpenID Connect 身分提供者中的基本宣告設定

OpenID Connect 身分提供者支援一個新的設定,用於指定由身分提供者發出的 ID 權杖必須具有特定宣告,否則使用者無法透過此代理進行驗證。

此選項預設為停用;啟用時,您可以指定要篩選的 JWT 權杖宣告名稱和要比對的值(支援規則運算式格式)。

支援 OpenID Connect 提供者中的 JWE 加密 ID 權杖和 UserInfo 回應

OpenID Connect 提供者現在支援 Json Web Encryption (JWE) 用於 ID 權杖和 UserInfo 回應。提供者使用為選定的加密演算法定義的領域金鑰來執行解密。

硬式編碼群組對應器

新的硬式編碼群組對應器允許將特定群組新增至從身分提供者代理的使用者。

使用者會話附註對應器

新的使用者會話附註對應器允許將宣告對應到使用者會話附註。

LDAP 聯盟

已移除僅限 LDAPS 的信任儲存區選項

用於信任儲存區 SPI 的 LDAP 選項 Only for ldaps 已移除。此參數用於為 TLS 保護的 LDAP 連線選取信任儲存區:選取內部 Keycloak 信任儲存區 (Always),或選取全域 JVM 信任儲存區 (Never)。

使用 Only for ldaps 的部署將自動表現得好像為 TLS 保護的 LDAP 連線選取了 Always 選項一樣。

已移除 Openshift 整合功能

允許使用 Keycloak 取代 OpenShift 3.x 中內部 IdP 的 openshift-integration 預覽功能已從 Keycloak 程式碼庫中移除到單獨的延伸專案中。

升級

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

所有已解決的問題

新功能

增強功能

錯誤