Keycloak 25.0.0 版本發布

2024 年 6 月 10 日

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

重點

已移除帳戶控制台 v2 主題

帳戶控制台 v2 主題已從 Keycloak 中移除。此主題已在 Keycloak 24 中被棄用,並由帳戶控制台 v3 主題取代。如果您仍在使用此主題,則應遷移到帳戶控制台 v3 主題。

Java 21 支援

Keycloak 現在支援 OpenJDK 21,因為我們希望堅持使用最新的 LTS OpenJDK 版本。

Java 17 支援已棄用

Keycloak 中已棄用 OpenJDK 17 支援,並將在後續版本中移除,以支持 OpenJDK 21。

已移除大部分 Java 轉接器

如先前 Keycloak 版本發行說明中所述,大部分 Java 轉接器現在已從 Keycloak 程式碼庫和下載頁面中移除。

對於 OAuth 2.0/OIDC,這包括移除 Tomcat 轉接器、WildFly/EAP 轉接器、Servlet Filter 轉接器、KeycloakInstalled 桌面轉接器、jaxrs-oauth-client 轉接器、JAAS 登入模組、Spring 轉接器和 SpringBoot 轉接器。您可以查看我們較早的文章,以取得一些替代方案的清單。

對於 SAML,這包括移除 Tomcat 轉接器和 Servlet filter 轉接器。WildFly 和 JBoss EAP 仍然支援 SAML 轉接器。

仍然支援通用的授權用戶端程式庫,我們仍然計劃支援它。它的目標是與任何其他 OAuth 2.0 或 OpenID Connect 程式庫結合使用。您可以查看快速入門,以取得一些範例,其中此授權用戶端程式庫與第三方 Java 轉接器(如 Elytron OIDC 或 SpringBoot)一起使用。您也可以查看快速入門,以取得與 WildFly 一起使用的 SAML 轉接器範例。

升級至 PatternFly 5

在 Keycloak 24 中,歡迎頁面已更新為使用 PatternFly 5,這是支援 Keycloak 使用者介面的設計系統的最新版本。在此版本中,管理控制台和帳戶控制台也已更新為使用 PatternFly 5。如果您想擴展和自訂管理控制台和帳戶控制台,請查看 PatternFly 5 中的變更,並相應地更新您的自訂項目。

Argon2 密碼雜湊

Argon2 現在是 Keycloak 在非 FIPS 環境中使用的預設密碼雜湊演算法。

Argon2 是2015 年密碼雜湊競賽的獲勝者,並且是 OWASP 推薦的雜湊演算法。

在 Keycloak 24 中,PBKDF2 的預設雜湊迭代次數從 27.5K 增加到 210K,導致產生密碼雜湊所需的 CPU 時間增加了 10 倍以上。使用 Argon2,可以在與先前版本的 Keycloak 幾乎相同的 CPU 時間下,實現更好的安全性。一個缺點是 Argon2 需要更多記憶體,這是抵抗 GPU 攻擊的必要條件。Keycloak 中 Argon2 的預設值每個雜湊請求需要 7MB。為了防止過度使用記憶體和 CPU,Argon2 的並行雜湊計算預設限制為 JVM 可用的核心數。為了支援 Argon2 的記憶體密集特性,我們已將預設 GC 從 ParallelGC 更新為 G1GC,以實現更好的堆積利用率。

新的主機名稱選項

為了回應先前主機名稱配置設定的複雜性和缺乏直觀性,我們很榮幸推出主機名稱 v2 選項。

我們聽取了您的回饋意見,解決了棘手的問題,並為管理主機名稱配置創建了更順暢的體驗。請注意,即使這些選項背後的行為也發生了變化,需要您注意 - 如果您正在處理自訂主機名稱設定。

預設情況下支援主機名稱 v2 選項,因為舊的主機名稱選項已棄用,並將在後續版本中移除。您應盡快遷移到它們。

新選項預設為啟用,因此 Keycloak 將無法識別舊選項。

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

永久使用者工作階段

先前版本的 Keycloak 僅將離線使用者和離線用戶端工作階段儲存在資料庫中。新功能 persistent-user-session 不僅將線上使用者工作階段和線上用戶端工作階段儲存在記憶體中,還儲存在資料庫中。即使重新啟動或升級 Keycloak 的所有執行個體,這也允許使用者保持登入狀態。

該功能是預覽功能,預設為停用。要使用它,請將以下內容新增至您的建置命令

bin/kc.sh build --features=persistent-user-session ...

如需更多詳細資訊,請參閱啟用和停用功能指南。調整大小指南包含一個新的段落,描述啟用此功能時更新的資源需求。

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

Cookie 更新

為所有 Cookie 設定 SameSite 屬性

以下 Cookie 過去不設定 SameSite 屬性,這在最近的瀏覽器版本中導致它們預設為 SameSite=Lax

  • KC_STATE_CHECKER 現在設定 SameSite=Strict

  • KC_RESTART 現在設定 SameSite=None

  • KEYCLOAK_LOCALE 現在設定 SameSite=None

  • KEYCLOAK_REMEMBER_ME 現在設定 SameSite=None

預設值 SameSite=Lax 會導致基於 POST 的繫結出現問題,這主要適用於 SAML,但也用於某些 OpenID Connect / OAuth 2.0 流程。

已移除 Cookie KC_AUTH_STATE,並且 Keycloak 伺服器不再設定此 Cookie,因為此伺服器不再需要此 Cookie。

已移除以下用於設定自訂 Cookie 的 API

  • ServerCookie - 由 NewCookie.Builder 取代

  • LocaleSelectorProvider.KEYCLOAK_LOCALE - 由 CookieType.LOCALE 取代

  • HttpCookie - 由 NewCookie.Builder 取代

  • HttpResponse.setCookieIfAbsent(HttpCookie cookie) - 由 HttpResponse.setCookieIfAbsent(NewCookie cookie) 取代

解決了過期驗證工作階段的「您已登入」問題

Keycloak 23 版本針對在多個瀏覽器索引標籤中並行驗證使用者時提供了改進。但是,此改進並未解決驗證工作階段過期的情況。現在,對於使用者已在一個瀏覽器索引標籤中登入,而驗證工作階段在其他瀏覽器索引標籤中過期的情況,Keycloak 能夠使用 OIDC/SAML 錯誤重新導向回用戶端應用程式,因此用戶端應用程式可以立即重試驗證,這通常應該會因為 SSO 工作階段而自動登入應用程式。如需更多詳細資訊,請參閱伺服器管理指南驗證工作階段

使輕量型存取權杖更加輕量

在先前的版本中,新增了對輕量型存取權杖的支援。在此版本中,我們設法從輕量型存取權杖中移除了更多內建宣告。這些宣告由通訊協定對應器新增。其中一些甚至會影響常規存取權杖或 ID 權杖,因為 OIDC 規格並非嚴格要求它們。

  • 宣告 subauth_time 現在由通訊協定對應器新增,預設情況下在新用戶端範圍 basic 上配置,該範圍會自動新增至所有用戶端。宣告仍然會像以前一樣新增至 ID 權杖和存取權杖,但不新增至輕量型存取權杖。

  • 宣告 nonce 現在僅新增至 ID 權杖。它不會新增至常規存取權杖或輕量型存取權杖。為了向後相容,您可以透過通訊協定對應器將此宣告新增至存取權杖,這需要明確配置。

  • 宣告 session_state 現在不會新增至任何權杖。如果需要,仍然可以透過通訊協定對應器新增它。規格仍然支援其他專用宣告 sid,它在先前的版本中也可用,並且具有完全相同的值。

如需更多詳細資訊,請參閱升級指南

在權杖內省端點中支援 application/jwt 媒體類型

您可以在叫用權杖內省端點時使用 HTTP 標頭 Accept: application/jwt。為特定用戶端啟用後,它會從權杖內省端點傳回宣告 jwt,其中包含完整的 JWT 存取權杖,這對於用戶端呼叫內省端點時使用輕量型存取權杖的情況特別有用。感謝 Thomas Darimont 的貢獻。

檢查密碼是否包含使用者名稱的密碼原則

Keycloak 支援新的密碼原則,該原則允許您拒絕包含使用者使用者名稱的使用者密碼。

必要動作改進

在管理控制台中,您現在可以在特定領域的必要動作索引標籤中設定某些必要動作。目前,更新密碼是唯一可設定的內建必要動作。它支援設定最大驗證時效,這是使用者在沒有重新驗證的情況下,透過 kc_action 參數(例如在帳戶控制台中更新密碼時使用)更新其密碼的最大時間。必要動作的排序也得到了改進。當在驗證期間有多個必要動作時,所有動作會一起排序,無論這些動作是在驗證期間設定的動作(例如透過 kc_action 參數)還是管理員手動新增至使用者帳戶的動作。感謝 Thomas DarimontDaniel Fesenmeyer 的貢獻。

Passkeys 改進

新增了對 Passkeys 條件式 UI 的支援。啟用 Passkeys 預覽功能後,將有一個可用的專用驗證器,這表示您可以從可用的 Passkeys 帳戶清單中選取,並據此驗證使用者。感謝 Takashi Norimatsu 的貢獻。

SAML 的預設用戶端設定檔

已新增預設的用戶端設定檔,以確保 SAML 用戶端的安全。當您在管理主控台中瀏覽領域的用戶端原則時,會看到一個新的用戶端設定檔 saml-security-profile。使用此設定檔時,會對 SAML 用戶端應用安全性最佳實務,例如強制簽署、停用 SAML 重新導向繫結,以及禁止使用萬用字元重新導向 URL。

新增了新的驗證器 Confirm override existing link。此驗證器允許覆寫 Keycloak 使用者的連結 IDP 使用者名稱,該使用者先前已連結到不同的 IDP 身分。更多詳細資訊請參閱伺服器管理指南。感謝 Lex Cao 的貢獻。

用於可驗證憑證發行的 OpenID - 實驗性支援

正在進行支援用於可驗證憑證發行 (OID4VCI) 的 OpenID 的工作。目前,這項工作仍在進行中,但正在逐步新增功能。Keycloak 可以作為 OID4VC 發行者,支援預先授權碼流程。它支援 JWT-VC、SD-JWT-VC 和 VCDM 格式的可驗證憑證。感謝 OAuth SIG 小組成員的貢獻和回饋,特別感謝 Stefan WiedemannFrancis PouatchaTakashi NorimatsuYutaka Obuchi

依使用者屬性搜尋不再區分大小寫

當依使用者屬性搜尋使用者時,Keycloak 不再強制使用小寫比較來搜尋使用者屬性名稱。此變更的目的是透過使用 Keycloak 在使用者屬性表格上的原生索引來加速搜尋。如果您的資料庫定序不區分大小寫,則搜尋結果將保持不變。如果您的資料庫定序區分大小寫,您可能會看到比以前更少的搜尋結果。

授權用戶端程式庫中的重大修正

對於 keycloak-authz-client 程式庫的使用者,呼叫 AuthorizationResource.getPermissions(…​) 現在會正確傳回 List<Permission>

先前,它會在執行階段傳回 List<Map>,即使方法宣告聲明為 List<Permission>

此修復會中斷依賴於將 List 或其內容轉換為 List<Map> 的程式碼。如果您在任何情況下使用過此方法,您很可能已經這樣做並受到影響。

匯出用戶端的授權設定時,不再設定 ID

匯出用戶端的授權設定時,資源、範圍和原則的 ID 不再設定。因此,您現在可以將一個用戶端的設定匯入到另一個用戶端。

用於指標和健康端點的管理埠

指標和健康檢查端點不再透過標準 Keycloak 伺服器埠存取。由於這些端點應對外隱藏,因此可以透過單獨的預設管理埠 9000 存取。

它允許在 Kubernetes 環境中不將其作為標準 Keycloak 端點暴露給使用者。新的管理介面提供了一組新的選項,並且完全可配置。

Keycloak Operator 預設假設管理介面已開啟。更多詳細資訊請參閱設定管理介面

用於遠端記錄的 Syslog

Keycloak 現在支援用於遠端記錄的 Syslog 協定。它使用 RFC 5424 中定義的協定。預設情況下,syslog 處理常式已停用,但啟用後,它會將所有記錄事件傳送到遠端 syslog 伺服器。

更多詳細資訊請參閱設定記錄指南。

變更類別 EnvironmentDependentProviderFactory

方法 EnvironmentDependentProviderFactory.isSupported() 在多個版本中已棄用,現在已移除。

更多詳細資訊請參閱升級指南

所有 cache 選項都是執行階段

現在可以在執行階段指定 cachecache-stackcache-config-file 選項。這消除了由於這些選項而需要執行建置階段和重建映像的需求。

更多詳細資訊請參閱升級指南

增強高可用性指南

高可用性指南現在包含如何設定 AWS Lambda 的指南,以防止從備份站點自動故障恢復到主要站點。

AccessTokenIDTokenJsonWebToken 類別中移除已棄用的方法

在此版本中,我們終於從以下類別中移除已棄用的方法

  • AccessToken

  • IDToken

  • JsonWebToken

更多詳細資訊請參閱升級指南

將方法 getExp 新增至 SingleUseObjectKeyModel

由於從 AccessTokenIDTokenJsonWebToken 中移除已棄用的方法,SingleUseObjectKeyModel 也進行了變更,以與有關過期值的方法名稱保持一致。

更多詳細資訊請參閱升級指南

支援 PostgreSQL 16

受支援和測試的資料庫現在包括 PostgreSQL 16。

推出對客戶身份和存取管理 (CIAM) 和多租戶的支援

在此版本中,我們以技術預覽功能的形式交付 Keycloak Organizations。

此功能為領域提供了一些核心 CIAM 功能,這些功能將作為未來更多功能的基础,以解決企業對企業 (B2B) 和企業對企業對客戶 (B2B2C) 的使用案例。

在功能方面,此功能已完成。但是,我們仍有工作要做,以便在下一個主要版本中完全支援它。剩餘的工作主要是為生產部署準備該功能,重點是可擴展性。此外,根據我們在下一個主要版本之前獲得的回饋,我們最終可能會接受其他功能並為該功能增加更多價值,而不會影響其路線圖。

更多詳細資訊請參閱伺服器管理指南

升級

升級前,請參閱遷移指南,以取得完整的變更列表。

所有已解決的問題

新功能

增強功能

錯誤修正