Keycloak 26.0.5

使用 Microsoft Active Directory 時,LDAP 使用者預設建立為已啟用

如果您使用 Microsoft AD 並透過管理介面建立使用者,則使用者預設將建立為已啟用。

在先前的版本中,只有在為使用者設定 (非暫時) 密碼後才能更新使用者狀態。此行為與其他內建使用者儲存庫不一致,也與 LDAP 提供者支援的其他 LDAP 廠商不一致。

Keycloak 26.0.0

支援組織

從 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) 現在已棄用,並將在未來的版本中移除。

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

高可用性多站台部署

Keycloak 26 對建議的 HA 多站台架構進行了重大改進,最值得注意的是

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

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

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

  • 持久性使用者會話現在是架構的要求。因此,使用者會話將保留在 Keycloak 或 Infinispan 升級中。

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

管理員引導和復原

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

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

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

OpenTelemetry 追蹤預覽

Keycloak 已公開底層的 Quarkus 對 OpenTelemetry 追蹤的支援,可取得應用程式追蹤以提高可觀測性。這有助於找出效能瓶頸、判斷應用程式失敗的原因、追蹤分散式系統中的請求等等。此支援目前處於預覽模式,我們很樂意收到任何回饋。

如需更多資訊,請參閱 啟用追蹤 指南。

用於可驗證憑證發行的 OpenID

用於可驗證憑證發行的 OpenID (OID4VCI) 在 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 用戶端現在預設使用輕量級存取令牌,因此「永遠使用輕量級存取令牌」和「允許完整範圍」現在已在這兩個用戶端上啟用。但是,管理主控台中的行為應保持不變。如果您對這兩個用戶端進行了變更,並且將它們用於其他用途,請務必謹慎。

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-trusted-addresses 來指定信任的 Proxy 位址許可清單。如果給定請求的 Proxy 位址不受信任,則不會使用相應的 Proxy 標頭值。

新增 proxy-protocol-enabled 選項

proxy-protocol-enabled 選項控制伺服器是否應在為來自 Proxy 後方的請求提供服務時使用 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 設定為用戶端的加密金鑰管理演算法。具有橢圓曲線 Diffie-Hellman 短暫靜態 (ECDH-ES) 規格的金鑰協定為 JWT 引入了三個新的標頭參數:epkapuapv。目前,Keycloak 實作僅管理強制性的 epk,而其他兩個(可選)則從不新增至標頭。如需有關這些演算法的更多資訊,請參閱 JSON Web 演算法 (JWA)

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

非常感謝 Justin Tay 的貢獻。

在領域中支援多個社群代理程式執行個體

現在可以在領域中擁有同一社群代理程式的多個執行個體。

大多數情況下,領域不需要同一社群代理程式的多個執行個體。但是,由於引入了 organization 功能,應該可以將同一社群代理程式的不同執行個體連結到不同的組織。

建立社群代理程式時,您現在應提供 Alias,並可選擇性提供 Display name,就像任何其他代理程式一樣。

憑證的新通用事件類型

現在已提供用於更新 (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 Realm 匯入

設定 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 元資料。

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

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

身份提供者不再可從 realm 表示法取得

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

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

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

保護應用程式和服務 文件已轉換為類似於先前版本中轉換的 伺服器安裝和設定 文件的新格式。該文件現在可在 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 屬性來取得使用者連結的提供者。

Keycloak 25.0.0

移除帳戶主控台 v2 主題

Keycloak 中已移除帳戶主控台 v2 主題。此主題已在 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,以獲得更好的堆積利用率。

請注意,Argon2 不符合 FIPS 140-2 標準。因此,如果您在 FIPS 環境中,預設演算法仍為 PBKDF2。另請注意,如果您在非 FIPS 環境中並且計劃遷移到 FIPS 環境,請考慮在一開始就將密碼原則變更為符合 FIPS 標準的演算法,例如 pbkdf2-sha512。否則,使用者在切換到 FIPS 環境後將無法登入。

新的主機名稱選項

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

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

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

預設情況下會啟用新的選項,因此 Keycloak 將無法識別舊的選項。

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

持續的使用者工作階段

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

此功能是預覽功能,預設情況下已停用。若要使用它,請將以下內容新增至您的組建命令

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

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

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

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 的 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 的貢獻。

通行金鑰改進

新增了對通行金鑰條件式 UI 的支援。當啟用通行金鑰預覽功能時,會有一個專用的驗證器可用,這表示您可以從可用的通行金鑰帳戶清單中選擇,並根據該帳戶驗證使用者。感謝 Takashi Norimatsu 的貢獻。

SAML 的預設用戶端設定檔

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

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

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

正在開發對 OpenID 可驗證憑證發行 (OID4VCI) 的支援。目前,這仍在開發中,但正在逐步新增功能。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<Permission>,它也會在執行階段傳回 List<Map>

此修復將會中斷依賴於將 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 組織作為技術預覽功能發佈。

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

在功能方面,此功能已完成。但是,我們仍然需要努力使其在下一個主要版本中得到完全支援。剩餘的工作主要是在準備此功能以用於生產部署,重點是可擴展性。此外,根據我們在下一個主要版本之前收到的回饋,我們最終可能會接受其他功能並為此功能增加更多價值,而不會損害其藍圖。

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

Keycloak 24.0.5

使用基於 client_secret_post 驗證的 PAR 用戶端的安全性問題

此版本修正了一個重要的安全性問題,該問題會影響某些使用 PAR(推送授權請求)的 OIDC 機密用戶端。如果您同時使用 OIDC 機密用戶端和 PAR,並且使用基於 client_idclient_secret 的用戶端驗證,這些憑證會以 HTTP 請求主體中的參數傳送(OIDC 規範中指定的 client_secret_post 方法),強烈建議您在升級到此版本後輪換您的用戶端密碼。

Keycloak 24.0.4

透過管理員使用者 API 更新使用者時,不再支援對使用者屬性進行部分更新

當透過管理員使用者 API 更新使用者屬性時,您無法在更新使用者屬性時執行部分更新,包括根屬性,如 usernameemailfirstNamelastName

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

Keycloak 24.0.1

Operator 部署 nightly 版本而非 24.0.0

由於使用 Operator 部署 Keycloak 時的發布流程出現問題,導致安裝了 nightly 容器,而不是 24.0.0

作為此問題的快速修正,24.0.0 容器被標記為 nightly,並且暫時停用了 nightly 發布版本。

如果您在昨天歐洲中部時間下午 5 點之前使用 Operator 安裝或升級到 24.0.0,資料庫可能已使用錯誤的版本更新。若要檢查您是否受到影響,請連線到您的資料庫並執行以下 SQL 命令

SELECT * from migration_model WHERE version = '999.0.0';

如果上述命令傳回相符的列,您將需要採取一些動作,否則未來的版本將不會執行資料庫遷移。若要解決此問題,請執行以下 SQL 命令

UPDATE migration_model SET version = '24.0.0' WHERE version = '999.0.0';

Keycloak 24.0.0

支援的使用者設定檔和漸進式設定檔

使用者設定檔預覽功能已升級為完全支援,並且預設啟用使用者設定檔。

在過去幾個月中,Keycloak 團隊投入了大量的精力來打磨使用者設定檔功能,使其獲得完全支援。在此版本中,我們繼續努力。根據來自我們優秀社群的徹底測試和回饋,進行了許多改進、修正和潤飾。

以下是此功能的一些重點:

  • 對使用者和管理員可以管理的屬性進行精細控制,以便您可以防止設定意外的屬性和值。

  • 能夠指定在表單上管理和顯示給一般使用者或管理員的用戶屬性。

  • 動態表單 - 以前,使用者建立或更新其設定檔的表單包含四個基本屬性,例如使用者名稱、電子郵件、名字和姓氏。新增任何屬性(或移除某些預設屬性)需要您建立自訂主題。現在可能不需要自訂主題,因為使用者會根據特定部署的需求,確切看到所要求的屬性。

  • 驗證 - 能夠為使用者屬性指定驗證器,包括內建的驗證器,您可以使用它們來指定最大或最小長度、特定正規表示式,或將特定屬性限制為 URL 或數字。

  • 註解 - 能夠指定特定屬性應以文字區域、具有指定選項的 HTML 選擇清單、日曆或許多其他選項的方式呈現。您也可以將 JavaScript 程式碼繫結到特定欄位,以變更屬性的呈現方式並自訂其行為。

  • 漸進式設定檔 - 能夠指定某些欄位僅針對 scope 參數的特定值才在表單上是必要的或可用。這有效地允許漸進式設定檔。您不再需要在註冊期間要求使用者填寫二十個屬性;您可以根據使用者使用的個別用戶端應用程式的要求,逐步要求使用者填寫屬性。

  • 從先前版本的遷移 - 現在始終啟用使用者設定檔,但對於那些未使用此功能的人來說,其運作方式與以前相同。您可以受益於使用者設定檔功能,但您不需要使用它們。有關遷移說明,請參閱升級指南

使用者設定檔作為受支援功能的第一個版本只是一個起點,也是提供更多有關身分管理功能的基礎。

我們要衷心感謝 Keycloak 傑出的社群,因為許多想法、需求和貢獻都來自社群!特別感謝

有關使用者設定檔功能的更多詳細資訊,請參閱伺服器管理指南

使用者設定檔 SPI 的重大變更

在此版本中,使用者設定檔 SPI 的變更可能會影響基於此 SPI 的現有實作。有關更多詳細資訊,請參閱升級指南

Freemarker 範本的變更,以根據使用者設定檔和領域來呈現頁面

在此版本中,更新了以下範本,以便可以根據設定到領域的使用者設定檔配置來動態呈現屬性

  • login-update-profile.ftl

  • register.ftl

  • update-email.ftl

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

透過代理程式首次登入時,用於更新設定檔頁面的新 Freemarker 範本

在此版本中,當使用者第一次透過代理程式驗證時,伺服器會使用 idp-review-user-profile.ftl 範本呈現更新設定檔頁面。

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

Java 介面卡的棄用和移除

早在 2022 年,我們就宣布了Keycloak 19 中 Keycloak 介面卡的棄用。為了給社群更多的時間來採用,這項時程被延後了

有鑑於此,這將是最後一個包含 OpenID Connect 和 SAML 介面卡的 Keycloak 主要版本。由於 Jetty 9.x 自 2022 年起就沒有受到支援,因此 Jetty 介面卡已在此版本中移除。

通用授權用戶端程式庫將繼續受到支援,並且旨在與任何其他 OAuth 2.0 或 OpenID Connect 程式庫結合使用。

我們將繼續提供的唯一介面卡是適用於最新版本 WildFly 和 EAP 8.x 的 SAML 介面卡。繼續支援此介面卡的原因是,Keycloak 中大部分 SAML 程式碼都是 WildFly 的貢獻。作為此貢獻的一部分,我們同意長期維護適用於 WildFly 和 EAP 的 SAML 介面卡。

Jetty 介面卡已移除

Jetty 9.4 在社群中已長時間不受支援,並在 2022 年達到生命週期結束。同時,該介面卡也沒有使用較新版本的 Jetty 進行更新或測試。基於這些原因,已從此版本中移除 Jetty 介面卡。

新的歡迎頁面

重新設計了 Keycloak 首次使用時出現的「歡迎」頁面。它提供了更好的設定體驗,並符合最新版本的PatternFly。簡化的頁面佈局僅包含用於註冊第一位管理使用者的表單。完成註冊後,使用者會直接被傳送到管理主控台。

如果您使用自訂主題,您可能需要更新它以支援新的歡迎頁面。有關詳細資訊,請參閱升級指南

新的帳戶主控台現在為預設值

我們在 Keycloak 22 中以預覽功能的形式引入了第 3 版帳戶主控台。在此版本中,我們將其設為預設版本,並在此過程中棄用第 2 版,該版本將在後續版本中移除。

這個新版本內建支援使用者設定檔功能,讓管理員可以設定帳戶主控台中可供使用者使用的屬性,並在登入後將使用者直接導向其個人帳戶頁面。

如果您正在使用或擴展此主題的自訂功能,您可能需要執行其他遷移。有關更多詳細資訊,請參閱升級指南

Keycloak JS

package.json 中使用 exports 欄位

Keycloak JS 介面卡現在在其 package.json 中使用exports 欄位。此變更改進了對 Webpack 5 和 Vite 等更現代的捆綁器的支援,但會帶來一些不可避免的重大變更。有關更多詳細資訊,請參閱升級指南

預設啟用 PKCE

Keycloak JS 介面卡現在預設將 pkceMethod 選項設定為 S256。此變更為所有使用此介面卡的應用程式啟用「驗證金鑰交換碼」(Proof Key Code Exchange) (PKCE)。如果您在不支援 PKCE 的系統上使用此介面卡,您可以將 pkceMethod 選項設定為 false 以停用它。

密碼雜湊的變更

在此版本中,我們調整了密碼雜湊的預設值,以符合OWASP 密碼儲存建議

作為此變更的一部分,預設密碼雜湊提供者已從 pbkdf2-sha256 變更為 pbkdf2-sha512。此外,基於 pbkdf2 的密碼雜湊演算法的預設雜湊迭代次數也已變更。此變更表示更好的安全性,並與最新建議一致,但會影響效能。可以透過將密碼原則 hashAlgorithmhashIterations 新增到您的領域來堅持使用舊行為。有關更多詳細資訊,請參閱升級指南

輕量存取權杖支援

此版本包含對輕量存取權杖的支援。因此,您可以為指定的用戶端提供較小的存取權杖。這些權杖只有少數宣告,這就是它們較小的原因。請注意,輕量存取權杖預設仍然是使用領域金鑰簽署的 JWT,並且仍然包含一些非常基本的宣告。

此版本引入了一個新增至輕量存取權杖旗標,該旗標在某些 OIDC 通訊協定對應器上可用。使用此旗標來指定是否應將特定宣告新增至輕量存取權杖。預設為關閉,這表示不會新增大多數宣告。

此外,還有一個用戶端策略執行器。您可以使用它來指定特定的用戶端請求應使用輕量級存取權杖還是常規存取權杖。除了執行器之外,您也可以在用戶端進階設定中使用「永遠使用輕量級存取權杖」旗標,這會導致該用戶端永遠使用輕量級存取權杖。如果需要更高的彈性,則可以使用執行器作為替代方案。例如,您可以選擇預設使用輕量級存取權杖,但僅針對指定的 scope 參數使用常規權杖。

先前的版本新增了一個「新增至權杖內省」開關。您可以使用它將存取權杖中不存在的宣告新增到內省端點回應中。

感謝 Shigeyuki Kabano 的貢獻,並感謝 Takashi Norimatsu 對此功能提供的協助和審閱。

OAuth 2.1 支援

此版本包含可選的 OAuth 2.1 支援。此版本中引入了新的用戶端策略設定檔,管理員可以使用這些設定檔來確保用戶端和特定的用戶端請求符合 OAuth 2.1 規範。針對機密用戶端和公用用戶端分別有專用的用戶端設定檔。感謝 Takashi NorimatsuShigeyuki Kabano 的貢獻。

在重新整理權杖流程中支援 scope 參數

從這個版本開始,支援 OAuth2/OIDC 端點中用於權杖重新整理的 scope 參數。使用此參數來請求範圍小於原始授予範圍的存取權杖,這表示您無法增加存取權杖範圍。此範圍限制不會影響已重新整理的重新整理權杖範圍。此功能按照 OAuth2 規範中所述運作。感謝 Konstantinos Georgilakis 的貢獻。

用於安全重新導向 URI 的用戶端策略執行器

引入了一個新的用戶端策略執行器 secure-redirect-uris-enforcer。您可以使用它來限制用戶端可以使用哪些重新導向 URI。例如,您可以指定用戶端重新導向 URI 不能有萬用字元、應該僅來自特定網域、必須符合 OAuth 2.1 規範等等。感謝 Lex CaoTakashi Norimatsu 的貢獻。

用於強制執行 DPoP 的用戶端策略執行器

引入了一個新的用戶端策略執行器 dpop-bind-enforcer。如果啟用了 dpop 預覽,您可以使用它來強制特定用戶端使用 DPoP。感謝 Takashi Norimatsu 的貢獻。

支援 EdDSA

您可以建立 EdDSA 領域金鑰,並將其用作各種用戶端的簽章演算法。例如,您可以使用這些金鑰來簽署權杖,或用於使用簽署的 JWT 進行用戶端驗證。此功能包含身分中介,其中 Keycloak 本身會簽署用於第三方身分提供者的 private_key_jwt 驗證的用戶端斷言。感謝 Takashi NorimatsuMuhammad Zakwan Bin Mohd Zahid 的貢獻。

JavaKeystore 提供者支援 EC 金鑰

用於提供領域金鑰的提供者 JavaKeystoreProvider 現在除了先前支援的 RSA 金鑰之外,還支援 EC 金鑰。感謝 Stefan Wiedemann 的貢獻。

在針對身分提供者使用 private_key_jwt 驗證時,將 X509 指紋新增至 JWT 的選項

當使用私密金鑰簽署的 JWT 進行用戶端驗證時,OIDC 身分提供者現在具有「將 X.509 標頭新增至 JWT」選項。此選項對於與某些需要 JWT 上存在指紋的身分提供者(例如 Azure AD)進行互通操作時非常有用。感謝 MT 的貢獻。

OAuth 授權類型 SPI

Keycloak 程式碼庫包含內部更新,以引入 OAuth 授權類型 SPI。此更新在引入 Keycloak OAuth 2 權杖端點支援的自訂授權類型時,提供了額外的彈性。感謝 Dmitry Telegin 的貢獻。

CORS 改善

與 CORS 相關的 Keycloak 功能已提取到 SPI 中,這可以提供額外的彈性。請注意,CorsSPI 是內部元件,可能會在未來的版本中變更。感謝 Dmitry Telegin 的貢獻。

信任儲存改善

Keycloak 引入了改良的信任儲存配置選項。Keycloak 信任儲存現在在整個伺服器中使用,包括外寄連線、mTLS 和資料庫驅動程式。您不再需要為個別區域配置單獨的信任儲存。若要配置信任儲存,您可以將信任儲存檔案或憑證放入預設的 conf/truststores 中,或使用新的 truststore-paths 配置選項。有關詳細資訊,請參閱相關的 指南

版本化的功能

功能現在支援版本控制。為了保持回溯相容性,所有現有的功能(包括 account2account3)都標記為版本 1。新引入的功能將使用版本控制,這表示使用者可以在所需功能的不同實作之間進行選擇。

有關詳細資訊,請參閱功能指南

Keycloak CR 信任儲存

您也可以利用 Keycloak CR 對信任儲存的新伺服器端處理,例如

spec:
  truststores:
    mystore:
      secret:
        name: mystore-secret
    myotherstore:
      secret:
        name: myotherstore-secret

目前僅支援 Secrets。

信任 Kubernetes CA

Kubernetes CA 的憑證會自動新增至由 Operator 管理的 Keycloak Pod 中。

SAML 身分提供者的自動憑證管理

現在可以將 SAML 身分提供者配置為自動從 IDP 實體中繼資料描述符端點下載簽署憑證。為了使用新功能,請在提供者中配置 Metadata descriptor URL 選項(發佈具有憑證的 IDP 中繼資料資訊的 URL),並將 Use metadata descriptor URL 設定為 ON。憑證會從該 URL 自動下載並快取在 public-key-storage SPI 中。憑證也可以使用提供者頁面中的操作組合,從管理主控台重新載入或匯入。

有關新選項的詳細資訊,請參閱文件

負載平衡器的非封鎖健全狀況檢查

新增了一個可在 /lb-check 取得的新健全狀況檢查端點。執行在事件迴圈中執行,這表示即使在 Keycloak 需要處理要求佇列中等待的許多請求的超載情況下,此檢查也具有回應性。例如,此行為在多站點部署中很有用,可避免故障轉移到另一個負載較重的站點。該端點目前正在檢查內嵌式和外部 Infinispan 快取的可用性。稍後可能會新增其他檢查。

預設情況下不提供此端點。若要啟用它,請使用 multi-site 功能執行 Keyloak。有關更多詳細資訊,請參閱啟用和停用功能

Keycloak CR 優化欄位

Keycloak CR 現在包含一個 startOptimized 欄位,可以用於覆寫有關是否為啟動命令使用 --optimized 旗標的預設假設。因此,即使在使用自訂 Keycloak 映像時,您也可以使用 CR 來配置建置時間選項。

增強的反向 Proxy 設定

現在可以使用新的 --proxy-headers 選項,單獨啟用對 ForwardedX-Forwarded-* 標頭的剖析。有關詳細資訊,請參閱反向 Proxy 指南。原始的 --proxy 選項現在已棄用,並將在未來的版本中移除。有關移轉說明,請參閱升級指南

在管理 API 和帳戶內容中對使用者表示法的變更

在此版本中,我們正在封裝根使用者屬性(例如 usernameemailfirstNamelastNamelocale),方法是將它們移至基本/抽象類別,以便在同時使用管理和帳戶 REST API 時,對這些屬性的序列化和還原序列化方式進行對齊。

此策略可確保用戶端管理屬性時的一致性,並確保它們符合為領域設定的使用者設定檔配置。

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

循序載入離線會話和遠端會話

從這個版本開始,Keycloak 叢集的第一個成員將循序載入遠端會話,而不是並行載入。如果啟用了離線會話預先載入,則也會循序載入這些會話。

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

無法再代表另一個已驗證的使用者執行動作

在此版本中,如果使用者已驗證且動作繫結到另一個使用者,您將無法再執行諸如電子郵件驗證之類的動作。例如,如果電子郵件連結繫結到其他帳戶,則使用者無法完成驗證電子郵件流程。

電子郵件驗證流程的變更

在此版本中,如果使用者嘗試追蹤連結以驗證電子郵件,並且先前已驗證過該電子郵件,則會顯示適當的訊息。

此外,還會觸發一個新的錯誤 (EMAIL_ALREADY_VERIFIED) 事件,以指示嘗試驗證已驗證的電子郵件。您可以使用此事件來追蹤在連結洩漏時可能發生的劫持使用者帳戶嘗試,或在使用者無法識別該動作時發出警示。

已棄用的離線會話預先載入

Keycloak 的預設行為是依需求載入離線會話。在啟動時預先載入它們的舊行為現在已棄用,因為在啟動時預先載入它們無法隨著會話數量的增加而良好地擴展,並增加了 Keycloak 的記憶體使用量。舊的行為將在未來的版本中移除。

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

記憶體中離線會話存留期覆寫的配置選項

為了降低記憶體需求,我們引入了一個配置選項,以縮短匯入 Infinispan 快取的離線會話的存留期。目前,預設情況下會停用離線會話存留期覆寫。

有關詳細資訊,請參閱伺服器管理指南

Infinispan 指標使用標籤來表示快取管理員和快取名稱

當啟用 Keycloak 內嵌快取的指標時,指標現在會使用標籤來表示快取管理員和快取名稱。

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

使用者屬性值長度擴充

在此版本中,Keycloak 支援儲存和搜尋超過 255 個字元的使用者屬性值,這在以前是個限制。

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

暴力破解保護變更

暴力破解保護機制進行了一些增強。

  1. 當嘗試使用 OTP 或恢復碼進行驗證時,若因暴力破解保護而失敗,則會使作用中的驗證工作階段失效。任何後續嘗試使用該工作階段進行驗證都會失敗。

  2. 在先前的 Keycloak 版本中,管理員必須選擇因帳戶遭受暴力破解攻擊而暫時或永久停用使用者。現在,管理員可以在使用者被暫時鎖定一定次數後永久停用該使用者。

  3. failedLoginNotBefore 屬性已新增至 brute-force/users/{userId} 端點。

授權原則

在先前的 Keycloak 版本中,當刪除使用者、群組或客戶端原則的最後一個成員時,該原則也會被刪除。不幸的是,如果該原則在彙總原則中使用,則可能會導致權限提升。為了避免權限提升,效果原則不再被刪除,管理員將需要更新這些原則。

Keycloak CR 快取設定檔選項

Keycloak CR 現在允許透過使用 cache 規範的 configMapFile 欄位來指定 cache-config-file 選項,例如:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  cache:
    configMapFile:
      name: my-configmap
      key: config.xml

Keycloak CR 資源選項

Keycloak CR 現在允許指定 resources 選項,以管理 Keycloak 容器的運算資源。它提供了透過 Keycloak CR,針對主要的 Keycloak 部署以及透過 Realm Import CR,針對領域匯入作業,獨立請求和限制資源的能力。

當未指定值時,預設的 requests 記憶體會設定為 1700MiB,而 limits 記憶體會設定為 2GiB

您可以根據您的需求指定自訂值,如下所示:

apiVersion: k8s.keycloak.org/v2alpha1
kind: Keycloak
metadata:
  name: example-kc
spec:
  ...
  resources:
    requests:
      cpu: 1200m
      memory: 896Mi
    limits:
      cpu: 6
      memory: 3Gi

如需更多詳細資訊,請參閱 Operator 進階配置

臨時鎖定記錄已替換為事件

現在有一個新的事件 USER_DISABLED_BY_TEMPORARY_LOCKOUT,當使用者被暴力破解保護器暫時鎖定時會觸發。由於新事件以結構化形式提供資訊,因此已移除 ID 為 KC-SERVICES0053 的記錄。

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

Cookie 更新

Cookie 處理程式碼已重構和改進,包括新的 Cookie 提供者。這為 Keycloak 處理的 Cookie 提供了更好的統一性,並在需要時能夠引入圍繞 Cookie 的配置選項。

SAML 用戶屬性對應器針對 NameID 現在僅建議有效的 NameID 格式

用戶屬性對應器針對 NameID 允許將 Name ID Format 選項設定為以下值:

  • urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName

  • urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName

  • urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos

  • urn:oasis:names:tc:SAML:2.0:nameid-format:entity

但是,Keycloak 不支援接收具有這些 NameIDPolicy 之一的 AuthnRequest 文件,因此這些對應器永遠不會被使用。支援的選項已更新為僅包含以下 Name ID 格式:

  • urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress

  • urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified

  • urn:oasis:names:tc:SAML:2.0:nameid-format:persistent

  • urn:oasis:names:tc:SAML:2.0:nameid-format:transient

在容器中執行時的不同 JVM 記憶體設定

Keycloak 不再指定初始和最大堆積大小的硬編碼值,而是使用相對於容器總記憶體的相對值。JVM 選項 -Xms-Xmx 已被 -XX:InitialRAMPercentage-XX:MaxRAMPercentage 取代。

這可能會顯著影響記憶體消耗,因此可能需要執行特定的操作。

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

GELF 記錄處理器已棄用

由於提供與 GELF 集成的 底層程式庫 已終止支援,Keycloak 將不再支援開箱即用的 GELF 記錄處理器。此功能將在未來的版本中移除。如果您需要外部記錄管理,請考慮使用檔案記錄解析。

支援多站點主動-被動部署

將 Keycloak 部署到多個獨立站點對於某些環境來說至關重要,以提供高可用性和從故障中快速恢復的能力。此版本支援 Keycloak 的主動-被動部署。

若要開始,請使用 高可用性指南,其中還包括將高可用性 Keycloak 部署到雲端環境的完整藍圖。

Keycloak 23.0.0

OpenID Connect / OAuth 2.0

FAPI 2 草案支援

Keycloak 具有新的用戶端設定檔 fapi-2-security-profilefapi-2-message-signing,確保 Keycloak 在與用戶端通訊時強制執行最新的 FAPI 2 草案規範。感謝 Takashi Norimatsu 的貢獻。

DPoP 預覽支援

Keycloak 提供了對 OAuth 2.0 應用層展示所有權證明 (DPoP) 支援的預覽。感謝 Takashi NorimatsuDmitry Telegin 的貢獻。

內省端點的更多彈性

在先前的版本中,內省端點會自動傳回存取權杖中可用的大部分宣告。現在,大多數協定對應器都包含新的 Add to token introspection 開關。此新增功能提供了更大的彈性,因為內省端點可以傳回與存取權杖不同的宣告。此變更是朝向「輕量級存取權杖」支援邁出的第一步,因為存取權杖可以省略許多宣告,而內省端點仍會傳回這些宣告。從先前版本遷移時,內省端點應傳回與存取權杖傳回的相同宣告,因此遷移後預設行為應有效地相同。感謝 Shigeyuki Kabano 的貢獻。

OAuth 2.0 裝置授權授予流程的功能旗標

OAuth 2.0 裝置授權授予流程現在包含一個功能旗標,因此您可以輕鬆停用此功能。此功能預設仍為啟用狀態。感謝 Thomas Darimont 的貢獻。

驗證

通行金鑰支援

Keycloak 提供了對 通行金鑰 的預覽支援。

通行金鑰註冊和驗證是透過 WebAuthn 的功能實現的。因此,Keycloak 的使用者可以透過現有的 WebAuthn 註冊和驗證來進行通行金鑰註冊和驗證。

同步的通行金鑰和裝置綁定的通行金鑰都可用於相同裝置和跨裝置驗證。但是,通行金鑰操作的成功與否取決於使用者的環境。請確定哪些操作可以在 該環境 中成功執行。感謝 Takashi Norimatsu 的貢獻,並感謝 Thomas Darimont 在此功能的想法和測試方面提供的幫助。

WebAuthn 改進

WebAuthn 原則包含一個新欄位:Extra Origins。它提供了與非 Web 平台(例如,原生行動應用程式)更好的互通性。感謝 Charley Wu 的貢獻。

您已登入

此版本解決了一個問題,即當使用者在多個瀏覽器標籤中開啟登入頁面並在一個瀏覽器標籤中進行驗證時,若使用者嘗試在另一個瀏覽器標籤中進行驗證,會出現訊息:您已登入。現在已改進為在第一個標籤中驗證後,其他瀏覽器標籤會自動驗證使用者。但是,仍需要更多改進。例如,當驗證工作階段過期並在一個瀏覽器標籤中重新啟動時,其他瀏覽器標籤不會自動跟隨登入。

用於指定最大驗證時間的密碼原則

Keycloak 支援一個新的密碼原則,允許您指定在使用者無需重新驗證即可變更密碼的最大驗證期限。當此密碼原則設定為 0 時,使用者必須重新驗證才能在帳戶主控台或透過其他方式變更密碼。您也可以指定低於或高於預設值 5 分鐘的值。感謝 Thomas Darimont 的貢獻。

部署

多站點主動-被動部署的預覽支援

將 Keycloak 部署到多個獨立站點對於某些環境來說至關重要,以提供高可用性和從故障中快速恢復的能力。此版本為 Keycloak 新增了主動-被動部署的預覽支援。

為了測試和驗證可以維持負載並從故障情境中恢復的設定,已經投入了大量的工作。若要開始,請使用 高可用性指南,其中還包括將高可用性 Keycloak 部署到雲端環境的完整藍圖。

轉接器

OpenID Connect WildFly 和 JBoss EAP

適用於 WildFly 和 JBoss EAP 的 OpenID Connect 轉接器,在先前的版本中已棄用,已在此版本中移除。它已被 WildFly 中包含的 Elytron OIDC 轉接器取代,該轉接器提供了從 Keycloak 轉接器無縫遷移的能力。

SAML WildFly 和 JBoss EAP

適用於 WildFly 和 JBoss EAP 的 SAML 轉接器不再以 ZIP 下載形式分發,而是以 Galleon 功能套件分發,使其安裝更輕鬆且更無縫。

請參閱 保護應用程式指南 以取得詳細資訊。

伺服器發行

負載卸載支援

Keycloak 現在具有 http-max-queued-requests 選項,可以在高負載下正確拒絕傳入的請求。有關詳細資訊,請參閱 生產指南

RESTEasy Reactive

Keycloak 已切換至 RESTEasy Reactive。使用 quarkus-resteasy-reactive 的應用程式,即使未使用反應式風格/語義,仍應受益於更佳的啟動時間、執行效能和記憶體佔用。直接依賴 JAX-RS API 的 SPI 應與此變更相容。依賴 RESTEasy Classic(包括 ResteasyClientBuilder)的 SPI 將不相容,且需要更新。其他 JAX-RS API 實作(如 Jersey)也需要此更新。

使用者設定檔

宣告式使用者設定檔在此版本中仍為預覽功能,但我們正努力將其升級為支援的功能。歡迎提供回饋。如果您發現任何問題或有任何改進的想法,歡迎建立 Github issue,最好加上 area/user-profile 標籤。也建議查看升級指南,其中包含此版本遷移的相關資訊。

群組可擴展性

對於具有許多群組和子群組的使用案例,群組搜尋的效能已獲得改善。此處進行了一些改進,允許對子群組進行分頁查找。感謝 Alice 的貢獻。

佈景主題

佈景主題的本地化檔案預設為 UTF-8 編碼

佈景主題的訊息屬性檔案現在以 UTF-8 編碼讀取,並自動回退至 ISO-8859-1 編碼。

請參閱遷移指南以了解更多詳細資訊。

儲存

移除 Map Store

Map Store 在先前的版本中為實驗性功能。從此版本開始,它已被移除,使用者應繼續使用目前的 JPA 儲存。請參閱遷移指南以了解詳細資訊。

Keycloak 22.0.3

透過範本註冊或更新使用者時的安全漏洞

Keycloak 22.0.2 中引入了一個安全漏洞。我們強烈建議不要升級到 22.0.2,並且任何已在生產環境中部署 22.0.2 的使用者應立即升級到 22.0.3。

對於在 Keycloak 升級到 22.0.2 後自行註冊的使用者,其密碼並未安全儲存,並且可能會暴露給 Keycloak 管理員。這僅影響在升級推出後註冊的使用者,而不影響任何先前註冊的使用者。

任何使用預覽宣告式使用者設定檔的領域都不受此問題影響,只有使用預設使用者設定檔提供者的領域才會受到影響。

若要識別您的部署中是否有任何受影響的使用者,您可以存取資料庫並執行以下 SQL 語句來查詢。

SELECT DISTINCT U.ID, U.USERNAME, U.EMAIL, U.REALM_ID FROM USER_ENTITY U
    INNER JOIN USER_ATTRIBUTE UA ON U.ID = UA.USER_ID
    WHERE UA.NAME IN ('password','password-confirm')

我們建議聯繫任何受影響的使用者,並為他們新增更新密碼所需的動作。

如果存在任何受影響的使用者,我們也建議執行以下 SQL 語句,從資料庫中刪除這些屬性

DELETE FROM USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')

如果曾在 22.0.2 版本之後備份資料庫,並且有受影響的使用者,我們建議刪除這些備份。

自訂使用者儲存提供者

如果提供者委派給 Keycloak 儲存使用者屬性,則具有自訂使用者儲存聯盟提供者的任何部署也可能受到影響,請驗證您的自訂使用者儲存以識別這是否是一個問題。

若要識別您的部署中是否有任何受影響的聯盟使用者,您可以存取資料庫並執行以下 SQL 語句來查詢。

SELECT DISTINCT USER_ID,REALM_ID,STORAGE_PROVIDER_ID FROM FED_USER_ATTRIBUTE
    WHERE NAME IN ('password','password-confirm')

如果存在任何受影響的聯盟使用者,我們也建議執行以下 SQL 語句,從資料庫中刪除這些屬性

DELETE FROM FED_USER_ATTRIBUTE UA WHERE UA.NAME IN ('password','password-confirm')

如果您的自訂使用者儲存提供者自行管理屬性,您應該查看您的自訂儲存以刪除 passwordpassword-confirm 屬性。

Keycloak 22.0.2

LDAP 和 Kerberos 整合的改進

Keycloak 現在在一個領域中支援多個 LDAP 提供者,這些提供者支援與同一 Kerberos 領域進行 Kerberos 整合。當 LDAP 提供者無法找到透過 Kerberos/SPNEGO 驗證的使用者時,Keycloak 會嘗試回退到下一個 LDAP 提供者。Keycloak 也更好地支援單個 LDAP 提供者支援多個彼此信任的 Kerberos 領域的情況。

Keycloak 22.0.0

伺服器發佈

已移除 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 Vault SPI 的新實作,稱為 Keycloak KeyStore Vault。顧名思義,此實作會從 Java 金鑰儲存檔案讀取機密。然後,可以在管理控制台的多個位置使用這些機密。如需更多詳細資訊,請參閱我們的指南和最新的文件

新增金鑰儲存設定來源

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

主機名稱除錯工具

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

Pass-through 代理模式變更

使用 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。

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

使用者 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。

Operator 資源的共同管理

在需要進階管理的場景中,您現在可以直接更新大多數由 operator 管理但尚未由 operator 直接設定的資源欄位。這可以用來替代 Keycloak 規格中不支援的 stanza。與不支援的 stanza 一樣,這些直接修改不被視為支援。如果您的修改導致 operator 無法管理資源,Keycloak CR 將會顯示此錯誤條件,並且 operator 會將其記錄下來。

身分代理

OpenID Connect 身分提供者中的必要宣告配置

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

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

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

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

硬編碼群組對應器

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

使用者會話記錄對應器

新的使用者會話記錄對應器允許將宣告對應至使用者會話記錄。

LDAP 聯合

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

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

使用 Only for ldaps 的部署將自動表現得如同為 TLS 安全 LDAP 連線選取了 Always 選項。

已移除 Openshift 整合功能

允許使用 Keycloak 取代 OpenShift 3.x 中內部 IdP 的 openshift-integration 預覽功能已從 Keycloak 程式碼庫中移除,並移至獨立的擴充專案。

Keycloak 21.1.2

驗證有效重新導向 URI 方案的變更

如果應用程式用戶端使用非 http(s) 的自訂方案,從現在開始,驗證需要有效的重新導向模式明確允許該方案。允許 custom 方案的範例模式為 custom:/testcustom:/test/*custom:*。基於安全性考量,像 * 這樣的一般模式不再涵蓋這些方案。

Keycloak 21.1.0

單一程式碼庫

過去,Keycloak 是在多個 GitHub 儲存庫中維護的

擁有多個儲存庫帶來了很多複雜性和繁瑣的工作。例如,對於單一變更,經常需要將多個提取請求傳送到不同的儲存庫。

為了簡化作業,我們現在已將所有內容遷移到主儲存庫

FIPS 140-2 支援

Keycloak 中的 FIPS 140-2 支援在先前的版本中為預覽版,現在已升級為正式支援。

實驗性帳戶主控台版本 3

帳戶主控台版本 3 現在作為 Keycloak 中的實驗性功能提供。此版本支援使用「使用者設定檔」功能建立的自訂欄位。如果您想試用並向我們提供一些早期意見反應,您可以按如下方式啟用它

bin/kc.sh start-dev --features=account3

Keycloak Java 基礎配接器中 Keycloak 授權服務支援的變更

作為移除已棄用配接器的一部分,Keycloak 原則強制執行器已從配接器程式碼庫中提取到獨立的相依性中

<dependency>
    <groupId>org.keycloak</groupId>
    <artifactId>keycloak-policy-enforcer</artifactId>
    <version>21.1.0</version>
</dependency>

透過提供此相依性,我們希望能夠將原則強制執行器與您偏好的 Java 堆疊整合。

它還提供內建的支援,可讓原則強制執行器在受 Wildfly Elytron 保護的 Jakarta 應用程式中啟用。

目前,此相依性尚未 GA,因為我們仍在處理快速入門和文件。

這項工作不應影響使用已棄用配接器的現有應用程式。 = 預設提供的 Javascript 引擎

在先前的版本中,當 Keycloak 在具有 Javascript 提供者的 Java 17 上使用時,需要將 Nashorn javascript 引擎新增到發行版中。現在不再需要這樣做,因為 Nashorn javascript 引擎預設在 Keycloak 伺服器中提供。

Keycloak 21.0.0

已移除舊的管理主控台

在 Keycloak 19 中,新的管理主控台已升級為新的預設管理主控台,而舊的管理主控台已棄用。在此版本中,已完全移除舊的管理主控台。

Keycloak 使用 Micrometer 進行度量

Keycloak 提供一個可選的度量端點,該端點以 Prometheus 格式匯出度量。在此版本中,提供此資料的實作已從 SmallRye 切換到 Micrometer。由於此變更,度量已重新命名。

請參閱移轉指南以取得詳細資訊。

Keycloak 伺服器的 Java 11 支援已棄用

現在已棄用使用 Java 11 執行 Keycloak 伺服器,並計劃在 Keycloak 22 中移除。

配接器仍然支援 Java 8、Java 11 和 Java 17。但是,我們計劃在不久的將來移除對 Java 8 的支援。

不再支援 Hashicop Vault

在此版本中,我們移除了對 Hashicorp Vault 的現成支援。

請參閱此討論以取得更多詳細資訊。

SAML SP 中繼資料變更

在此版本之前,SAML SP 中繼資料包含用於簽署和加密的相同金鑰。從此版本的 Keycloak 開始,我們僅在 SP 中繼資料中包含用於加密的預定 realm 金鑰。對於每個加密金鑰描述元,我們還會指定應使用的演算法。下表顯示了支援的 XML-Enc 演算法及其與 Keycloak realm 金鑰的對應。請參閱升級指南以取得更多詳細資訊。

XML-Enc 演算法

Keycloak realm 金鑰演算法

rsa-oaep-mgf1p

RSA-OAEP

rsa-1_5

RSA1_5

已移除使用者會話提供者中的已棄用方法

已從使用者會話提供者中移除數個已棄用的方法。如果尚未完成,則需要使用 Keycloak 20 發行版本的 Javadoc 中記錄的相應替代方法取代其用法。請參閱升級指南以取得更多詳細資訊。

新儲存體:IS_CLIENT_ROLE 可搜尋欄位已棄用

已棄用 RoleModel 中的 IS_CLIENT_ROLE 可搜尋欄位。應使用運算子 EXISTSNOT_EXISTSCLIENT_ID 可搜尋欄位取代它。請參閱 Keycloak 21 的 JavaDoc 以取得更多詳細資訊。

FIPS 140-2 預覽支援

Keycloak 中的 FIPS 140-2 支援在先前的版本中為實驗性,現在已升級為預覽版。為建立此預覽版本進行了許多修正和改進。如需詳細資訊,請參閱FIPS 文件。歡迎提供意見反應!

再次感謝 David AndersonSudeep DasIsaac Jensen 在此功能上的巨大協助。

當在反向 Proxy 後方執行時,支援標準的 Forwarded 標頭

除了識別非標準的 X-Forwarded-* 以提取 Proxy 新增的資訊(如果 Proxy 伺服器參與請求路徑,這些資訊可能會被變更或遺失)之外,Keycloak 現在還可以利用標準的 Forwarded 標頭來達到相同的目的。

如需更多詳細資訊,請參閱使用反向 Proxy 指南。

請確保您的 Proxy 在向 Keycloak 節點發出請求時也會覆寫 Forwarded 標頭。

容器映像現在基於 ubi9-micro

為了提高安全性,Keycloak 容器映像已進行兩方面的修改:首先,它現在基於 UBI9 而不是 UBI8。其次,我們已切換到 -micro,而之前使用的是 -minimal

變更至 UBI9 對大多數使用者不會有任何影響。在極少數情況下,可能會出現 glibc 錯誤 CPU 不支援 x86-64-v2x86-64-v2 自 2009 年起已在處理器上提供。當您的虛擬化環境配置錯誤時,最有可能遇到此問題。

-minimal 變更為 -micro 具有較大的潛在影響。對映像檔進行簡單客製化的使用者不會注意到任何差異,但是任何安裝 RPM 的使用者都需要變更其執行方式。《在容器中執行 Keycloak》指南已更新,向您展示如何操作。

由於這些變更,影響 Keycloak 容器映像檔的已知 CVE 減少了 82%!

其他改進

Keycloak 20.0.0

已移除 WildFly 發行版本

在 Keycloak 17.0.0 中,基於 Quarkus 的新 Keycloak 發行版本已推出,而基於 WildFly 的發行版本則已棄用。在此版本中,已移除 WildFly 發行版本,且不再支援。

如果您仍在使用 WildFly 發行版本,我們強烈建議您盡快遷移到 Quarkus 發行版本,請參閱遷移指南以了解更多詳細資訊。

新的 Keycloak Operator 升級

我們很高興宣布,基於 Quarkus 發行版本的新 Keycloak Operator 不再是預覽功能。我們新增了新功能以及一些改進,其中一些導致了重大變更。

Realm Operator

由於新的 Operator 目前缺少一些 CR(例如,Client 和 User),我們正在引入一種臨時解決方案,即 Realm Operator。請參閱其 GitHub 儲存庫以了解更多詳細資訊。另請參閱「Keycloak Operator CR 的未來」部落格文章

支援的 OpenJDK 版本

Keycloak 現在同時支援伺服器和轉接器的 OpenJDK 17。

隨著基於 WildFly 的發行版本的移除,不再支援在 OpenJDK 8 上執行 Keycloak 伺服器。我們也計劃在 Keycloak 21 中移除對 OpenJDK 8 上 Keycloak 轉接器的支援。

從 Keycloak 22 開始,我們計劃僅支援最新的 OpenJDK LTS 發行版本,並致力於快速支援最新的 OpenJDK 發行版本。這表示我們也將在 Keycloak 22 中移除對 Keycloak 伺服器的 OpenJDK 11 支援。

主機名稱提供者現在支援設定完整的基本 URL

在此版本中,我們引入了兩個額外的伺服器選項,以設定前端請求和管理控制台的基本 URL

  • hostname-url

  • hostname-admin-url

更多詳細資訊請參閱《設定主機名稱》指南。

在 Windows 上執行 Keycloak 時對 kc.bat 的改進

在此版本中,我們正在對 kc.bat 進行重要變更,使其提供與在 Linux 上執行時相同的體驗。

嵌入式 H2 資料庫升級

Keycloak 為開發目的而提供 H2 資料庫驅動程式。由於其僅用於開發目的,因此絕不應在生產環境中使用。

在此版本中,H2 驅動程式已從 1.x 版本升級到 2.x 版本。

用於託管 Keycloak JavaScript 轉接器的功能保護

應用程式可以從 Keycloak 伺服器直接載入 keycloak.js。由於以這種方式載入 JavaScript 程式庫不被視為最佳做法,因此現在有一個功能保護,允許停用此功能。

在 Keycloak 21 中,我們將棄用此選項,並且在 Keycloak 22 中,我們計劃完全移除從 Keycloak 伺服器載入 keycloak.js 的功能。

OTP 應用程式 SPI

在先前的版本中,向使用者顯示的 OTP 應用程式清單在 Keycloak 中是硬式編碼的。隨著 OTP 應用程式 SPI 的引入,現在可以停用內建的 OTP 應用程式,以及新增自訂的 OTP 應用程式。

自訂身分提供者現在可以為提供者設定圖示

自訂身分提供者現在可以設定在登入頁面上使用的圖示。感謝 Klaus Betz,他恰好也維護 Keycloak 的擴充功能,以支援使用 AppleID 登入

FIPS 140-2 實驗性支援

現在有將 Keycloak 部署到已啟用 FIPS 140-2 的環境的實驗性支援。在發布後不久將會有一篇部落格文章,詳細說明如何嘗試。歡迎提供意見!

感謝 David Anderson,他貢獻了此功能的部分內容。此外,感謝 Sudeep DasIsaac Jensen 最初的原型工作,該工作被用作靈感。

依屬性搜尋群組

現在可以透過管理 REST API 依屬性搜尋群組。感謝 Alice 的貢獻。

在帳戶控制台中檢視群組成員資格

現在可以允許使用者在帳戶控制台中檢視其群組成員資格。感謝 cgeorgilakis 的貢獻。

已移除資料提供者和模型中已棄用的方法

已從資料提供者和模型中移除數個已棄用的方法。如果尚未完成,則需要將其用法替換為 Keycloak 19 版本 Javadoc 中記載的相應替換。請參閱《升級指南》以了解更多詳細資訊。

Keycloak 19.0.0

OpenID Connect 和 SAML 轉接器生命週期結束

某些 Keycloak OpenID Connect 轉接器已達到生命週期結束,並且未包含在此版本中。

Fuse 6 和 7 (OpenID Connect)

Keycloak 將不再為 Fuse 6 或 7 提供轉接器。如果您需要 Fuse 的轉接器,請利用 Red Hat Single Sign-On 7.x 轉接器。

JBoss AS 7 和 EAP 6 (OpenID Connect 和 SAML)

JBoss AS 7 已長時間未維護。如果您仍在使用 JBoss AS 7,我們建議您遷移到 WildFly 並利用 WildFly 中的原生 OIDC 支援。

使用 Red Hat JBoss Enterprise Application Platform 6.x 的 Red Hat 客戶應使用 Red Hat Single Sign-On 7.x 轉接器。這些可以與 Keycloak 伺服器結合使用。

Jetty 9.2 和 9.3 (OpenID Connect 和 SAML)

Jetty 9.2 在 2018 年達到生命週期結束,而 Jetty 9.3 在 2020 年達到生命週期結束。如果您仍在使用這些版本,我們建議您盡快升級到 Jetty 9.4。

Spring Boot 1 (OpenID Connect)

Spring Boot 1.x 在 2019 年達到生命週期結束。如果您仍在使用 Spring Boot 1,我們建議您盡快升級到 Spring Boot 2。

WildFly 舊版安全性層 (OpenID Connect 和 SAML)

在 WildFly 25 中,已移除舊版安全性層,未來將僅支援 Elytron。我們建議任何使用舊版 WildFly 的使用者升級並利用 WildFly 中的原生 OIDC 支援。

使用 Red Hat JBoss Enterprise Application Platform 7.x 的 Red Hat 客戶應使用 Red Hat Single Sign-On 7.x 轉接器。這些可以與 Keycloak 伺服器結合使用。

新的管理控制台畢業

新的管理控制台現在已升級為預設管理控制台,而舊控制台現在已棄用。舊控制台將在 Keycloak 21 中移除。

Keycloak 儲存中的變更

Keycloak 儲存正在變更,目前的儲存雖然仍受支援,但最終將被全新的實作取代。此變更為雲端原生儲存帶來更好的支援、無停機能力,以及為使用者以外的其他區域實作自訂儲存的更好支援。

這表示目前儲存支援的功能中,數個深度變更將成為舊版功能。舊版儲存和新儲存無法同時使用;一次只能啟用一個儲存。

最明顯的變更是使用者儲存 SPI 與新的儲存 API(地圖儲存 API)不相容。因此,使用者儲存 SPI 將會隨著舊版儲存而棄用,並會移至一個稱為 keycloak-model-legacy 的獨立模組。此變更會影響數個區域,尤其是與使用者聯盟和自訂使用者提供者相關的區域。

此外,API 已整合,以便儲存層的詳細資訊對 REST 服務層透明。具體而言,服務將無法區分快取和非快取物件,也無法特別存取聯合儲存與本機儲存。

因此,必須檢閱透過 KeycloakSession 方法存取本機儲存或快取中的物件的自訂擴充功能。請參閱《升級指南》以了解詳細資訊。

OIDC 登出變更

在上一個版本中,我們新增了對 OIDC 登出的支援。此版本包含其他一些修正和調整。重點包括

  • 支援 client_id 參數,該參數已新增至最近的 OIDC RP 起始登出規格草案。因此,無需使用用戶端的 需要同意 旗標來顯示登出確認畫面。

  • 為 OIDC 用戶端新增了設定選項 有效的登出後重新導向 URI。此變更與 OIDC 規格一致,該規格允許您為登入後和登出後的重新導向使用不同的重新導向 URI 集合。用於 有效的登出後重新導向 URI 的值 + 表示登出將使用與 有效的重新導向 URI 選項指定的相同的重新導向 URI 集合。此變更也符合從先前版本遷移時的預設行為,以實現回溯相容性。

如需更多詳細資訊,請參閱《伺服器管理指南》。

更新電子郵件工作流程

新增了預覽功能 UPDATE_EMAIL。啟用此功能並在領域中啟用對應的旗標後,使用者必須點擊傳送到他們新電子郵件地址的連結,以確認更新其電子郵件。更多詳細資訊,請參閱伺服器管理指南。感謝 Réda Housni Alaoui 的貢獻。

舊版 Keycloak Operator 中已棄用的 podDisruptionBudget

在此版本中,我們已棄用舊版 Keycloak Operator 的 Keycloak CR 中的 podDisruptionBudget 欄位。當 Operator 部署在 Kubernetes 1.25 或更高版本上時,此選用欄位將被忽略。

作為一種解決方案,您可以在叢集中手動建立 Pod 擾動預算,例如

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
  labels:
    app: keycloak
  name: keycloak
spec:
  maxUnavailable: 1
  selector:
    matchLabels:
      component: keycloak

另請參閱Kubernetes 文件

集中式日誌記錄的初始支援

從 19 版開始,Keycloak 支援使用 GELF 將日誌發送到集中式日誌解決方案,例如開箱即用的 ELK、EFK 或 Graylog。

您可以在日誌記錄指南中找到相關文件和範例,以協助您快速上手。

Keycloak 18.0.0

新 Operator 預覽

在此版本中,我們將推出一個全新的 Keycloak Operator 作為預覽。除了從頭開始重寫之外,與舊版 Operator 相比,主要面向使用者的變更在於使用的 Keycloak 發行版本 – 新 Operator 使用 Keycloak 的 Quarkus 發行版本。因此,API(以自訂資源定義的形式)已變更。有關詳細資訊,包括安裝和移轉說明,請參閱與 Operator 相關的指南

在 Keycloak WildFly 發行版本達到 EOL 之前,舊版 Operator 將會收到更新,直到 Keycloak 20 版本。

OperatorHub 版本控制方案

為了避免與舊版 Operator 發生版本衝突,新 Operator 的 18.0.0 版本在 OperatorHub 上發佈為版本 20.0.0-alpha.1。舊版 Operator 的版本控制方案保持不變,即發佈為 18.0.0。

相同的模式將適用於未來 Keycloak 18 和 19 版本,直到舊版 Operator 達到 EOL 的 20 版本。

新管理控制台預覽

新的管理控制台現在已升級為預覽版,計畫在 Keycloak 19 中成為預設的管理控制台。

如果您發現新控制台有任何問題,或有任何改進建議,請透過GitHub Discussions告訴我們。

逐步驗證

Keycloak 現在支援逐步驗證。此功能已在 Keycloak 17 中新增,並在此版本中進一步完善。

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

感謝 Cornelia LahnsteinerGeorg Romstorfer 的貢獻。

用戶端密碼輪換

Keycloak 現在支援透過客戶策略進行用戶端密碼輪換。此功能目前以預覽功能的形式提供,允許為機密用戶端提供領域策略,使其可以同時使用最多兩個密碼。

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

復原代碼

復原代碼作為進行雙重驗證的另一種方式,現在以預覽功能的形式提供。

OpenID Connect 登出改進

進行了一些修正和改進,以確保 Keycloak 現在完全符合所有 OpenID Connect 登出規範

  • OpenID Connect RP 發起的登出 1.0

  • OpenID Connect 前端通道登出 1.0

  • OpenID Connect 後端通道登出 1.0

  • OpenID Connect 工作階段管理 1.0

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

WebAuthn 改進

Keycloak 現在支援無 ID 的 WebAuthn 驗證。此功能允許 WebAuthn 安全金鑰在驗證期間識別使用者,只要安全金鑰支援常駐金鑰即可。更多詳細資訊,請參閱伺服器管理指南。感謝 Joaquim Fellmann 的貢獻。

除了上述改進之外,還有更多 WebAuthn 的改進和修正。

已移除已棄用的 upload-script 功能

upload-script 功能已被標記為已棄用很長一段時間。在此版本中,它已完全移除,不再受支援。

如果您正在使用任何這些功能

  • OpenID Connect 指令碼對應器

  • 指令碼驗證器(驗證執行)

  • JavaScript 策略

您應該考慮閱讀此文件,以了解如何繼續依賴這些功能,但將您的指令碼部署到伺服器,而不是透過管理介面管理它們。

工作階段限制

Keycloak 現在支援限制使用者可以擁有的工作階段數量。限制可以放置在領域層級或用戶端層級。

更多詳細資訊,請參閱伺服器管理指南。感謝 Mauro de Wit 的貢獻。

預設停用 SAML ECP 設定檔

為了降低濫用 SAML ECP 設定檔的風險,Keycloak 現在會封鎖所有未明確允許此流程的 SAML 用戶端。可以使用用戶端組態中的「允許 ECP 流程」旗標來啟用該設定檔,請參閱伺服器管理指南

Quarkus 發行版本

啟動時匯入領域

Keycloak Quarkus 發行版本現在支援在啟動時直接匯入您的領域。有關更多資訊,請查看對應的指南

JSON 和檔案記錄改進

Keycloak Quarkus 發行版本現在初步支援記錄到檔案和使用 JSON 記錄結構化資料。

有關改進的更多資訊,請查看對應的記錄指南。

keycloak.conf 中值的環境變數擴充

Keycloak Quarkus 發行版本現在支援從環境變數擴充 keycloak.conf 中的值。

有關更多資訊,請查看對應的指南

新選項 db-url-port

您現在可以透過設定新的 db-url-port 組態選項,明確變更 jdbc 連接字串的埠。至於其他便利選項,如果設定了完整 db-url 的值,此選項將會被覆寫。

將 metrics-enabled 選項分割為 health-enabled 和 metrics-enabled

metrics-enabled 選項現在僅啟用 Keycloak 的度量。若要啟用就緒和活動探測,則有一個新的建置選項 health-enabled。這允許更精細地使用這些選項。

其他改進

  • 帳戶控制台與最新的 PatternFly 版本對齊。

  • 支援加密的使用者資訊端點回應。感謝 Giacomo Altiero

  • 支援用於加密金鑰的演算法 RSA-OAEP with A256GCM。感謝 Filipe Bojikian Rissi

  • 支援使用 GitHub Enterprise 伺服器登入。感謝 Neon Ngo

Keycloak 17.0.0

重點

現在完全支援 Quarkus 發行版本

預設 Keycloak 發行版本現在基於 Quarkus。新的發行版本更快、更精簡,而且更容易設定!

我們理解從 WildFly 發行版本移轉對所有人來說並非易事,因為您啟動和設定 Keycloak 的方式已發生根本性的變化。考慮到這一點,我們將繼續支援 WildFly 發行版本,直到 2022 年 6 月。

有關如何移轉到新發行版本的資訊,請查看Quarkus 移轉指南

Quarkus 發行版本更新

我們投入大量精力來完善和改進 Quarkus 發行版本,使其盡可能提供良好的體驗。以下是一些重點

  • 以伺服器指南的形式提供新的文件方法,以協助您安裝和設定 Keycloak

  • 將 Quarkus 升級到 2.7.0.Final

  • 組態檔不再是 Java 特定的,並且使組態金鑰與 CLI 引數對齊

  • 清楚區分 建置選項執行時間組態

  • h2-memh2-file 資料庫重新命名為 dev-memdev-file

  • 簡化了啟用和停用功能

  • 透過 conf/quarkus.properties 完成自訂且不受支援的 Quarkus 組態。

  • 能夠透過 JAVA_OPTS_APPEND 新增自訂 Java 選項(感謝 dasniko

  • 初始記錄功能

  • 初始支援跨資料中心

  • 不再支援使用者定義的設定檔,但可以使用不同的組態檔來實現相同的目標

  • 快速入門已更新為使用新的發行版本

其他改進

離線工作階段延遲載入

離線工作階段現在預設從資料庫延遲提取,而不是在伺服器啟動期間預先載入。

Keycloak 現在支援在管理控制台中列出使用者時,使用類似 glob 的語法進行使用者搜尋,這允許三種不同的搜尋類型:前置 (foo*,這成為預設搜尋)、中置 (*foo*) 和精確 "foo")

Keycloak 16.1.0

重點

升級到 Wildfly 26.0.0

Keycloak 伺服器已升級為使用 Wildfly 26.0.0.Final 作為底層容器。

有關 WildFly 26 的更多資訊,請參閱WildFly 26 版本說明

Keycloak 16.0.0

重點

升級到 Wildfly 25.0.1

Keycloak 伺服器已升級為使用 Wildfly 25.0.1.Final 作為底層容器。

WildFly 25 放棄了對舊版安全子系統的支援,該子系統將完全由 Elytron 取代。這需要對 Keycloak 的設定方式進行重大變更。請參閱移轉指南以取得更多詳細資訊。

有關 WildFly 25 的更多資訊,請參閱WildFly 25 版本說明

升級到 Quarkus 2.5.3

Keycloak.X Quarkus 預覽發行版本已升級到 Quarkus 2.5.3。

Keycloak 15.1.0

重點

Quarkus 發行版本預覽

毫無疑問,此版本最大的重點是對 Quarkus 發行版本所做的所有改進。事實上,它們太多了,很難一一列舉。

CLI 工具經過多次完善,我們相信它現在提供了一個非常簡單且方便的方法來配置和運行 Keycloak。它幾乎簡單到不需要任何文件說明。

要開始使用,只需解壓縮發行版,然後輸入 bin/kc.[sh|bat] -h 來探索它的強大功能!

這並不表示我們不打算為配置 Keycloak 提供文件說明,只是這次沒有來得及。在缺乏文件說明的情況下,預計發布後會有一篇部落格文章,介紹 Quarkus 發行版的所有變更,以及如何使用它的概述。

我們正快速朝向將 Quarkus 發行版設為預設發行版的方向邁進,並且很快將棄用 WildFly 發行版。考慮到這一點,盡可能讓更多人試用它並向我們提供回饋非常重要,如果您發現任何可用性問題、無法使用它配置某些東西,或發現任何錯誤,請告訴我們。

我們很樂意聽取您的想法,並在 GitHub Discussions 中獲得您的回饋!

新的管理控制台預覽

新的管理控制台的開發進展順利,主發行版中包含一個預覽版。它還沒有完全完成所有功能,但仍有許多東西可以試用。

WildFly 更新

從 WildFly 23 升級到 WildFly 25 花費的時間比我們預期的要長得多。我們仍在努力處理這個問題,並希望盡快發布升級後的 Keycloak 16,但由於我們希望將 Quarkus 發行版的更新發布出去,因此我們在此期間進行了此發布。

WildFly 轉接器棄用

在 WildFly 25 中,現在有出色的原生 OpenID Connect 支援,不需要 Keycloak 轉接器。考慮到這一點,我們正在棄用我們的 WildFly 轉接器,並且將不支援 WildFly 25,但它將會在一段時間內繼續支援舊版本的 WildFly 和 Red Hat JBoss Enterprise Application Platform 7.y。

Spring Security 和 Boot 轉接器棄用

很久以前,隨著 Spring Security 5.0 的發布,Spring 現在原生支援 OAuth 2.0 和 OpenID Connect。考慮到這一點,現在是開始棄用我們的 Spring Boot 和 Security 轉接器的時候了。

OpenID Connect 前端通道登出支援

Keycloak 現在支援 OpenID Connect 前端通道登出 1.0

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

感謝 Ronaldo Yamada 的貢獻。

Keycloak Operator 中已棄用的功能

在此版本中,我們已棄用和/或標記為不支援 Keycloak Operator 中的某些功能。這涉及 Backup CRD 和運算子管理的 Postgres 資料庫。

Keycloak 15.0.1

重點

此版本包含一些重要的錯誤修正。此外,我們要感謝 Leandro José de Bortoli 對 FAPI 相關功能的貢獻,例如 JARM 支援和 CIBA 的改進。

Keycloak 15.0.0

重點

金融級 API (FAPI) 改進、FAPI CIBA 和巴西開放銀行

Keycloak 伺服器改進了對金融級 API (FAPI) 的支援。更具體地說,Keycloak 現在符合 FAPI CIBA 和巴西開放銀行的規範。我們也支援 CIBA ping 模式。感謝 Takashi Norimatsu 完成 FAPI CIBA 的大部分工作,並且他持續為 Keycloak 專案做出非常出色的貢獻。還要感謝 Dmytro MishchukAndrii MurashkinHryhorii HevorkianLeandro José de Bortoli 在 FAPI 合規性方面做了大量工作。最後,感謝 FAPI 特殊興趣小組的所有成員的幫助和回饋。

Keycloak 14.0.0

重點

用戶端原則和金融級 API (FAPI) 支援

Keycloak 伺服器現在正式支援用戶端原則和金融級 API (FAPI)。此功能在較早的版本中進行了預覽,但現在它更加完善,並且有適當的文件說明。感謝 Takashi Norimatsu 完成這項工作的大部分。還要感謝 Dmytro MishchukAndrii MurashkinHryhorii Hevorkian 也在此功能的開發方面做了大量工作。最後,感謝 FAPI 特殊興趣小組的所有成員的幫助和回饋。

使用者設定檔 SPI 的改進和對宣告式設定的支援

在此版本中,使用者設定檔 SPI 有多項改進,以便為 Keycloak 中管理使用者設定檔的方式做好準備。

其中一項改進是支援透過管理控制台配置使用者設定檔。如需更多詳細資訊,請參閱伺服器管理指南

感謝社群和所有參與此工作的個人。

離線工作階段的改進

由於 Peter Flintholm 的努力,離線工作階段預先載入功能得到了改進,速度應該會更快。

由於 Thomas Darimont 的努力,作為預覽功能,可以跳過離線工作階段預先載入,改為延遲載入。此功能必須在伺服器設定中明確啟用,有關詳細資訊,請參閱伺服器管理指南。

其他改進

  • 支援配置最大活動驗證工作階段數。預設值設定為每個瀏覽器工作階段 300 個驗證工作階段(瀏覽器索引標籤)

Keycloak 13.0.0

重點

升級到 Wildfly 23

Keycloak 伺服器已升級為使用 Wildfly 23.0.2.Final 作為基礎容器。

OAuth 2.0 裝置授權許可 (RFC 8628)

現在可以使用 OAuth 2.0 裝置授權許可。

感謝 Hiroyuki Wada、Łukasz DywickiMichito Okai

OpenID Connect 用戶端啟動的回溯通道驗證 (CIBA)

現在可以使用 OpenID Connect 用戶端啟動的回溯通道驗證 (CIBA)。

感謝 Takashi NorimatsuAndrii MurashkinChristophe Lannoy 和 FAPI WG 的成員的實作和回饋。

伺服器到用戶端通訊中的 SAML 成品繫結

Keycloak 現在支援使用 SAML成品繫結與用戶端進行通訊。用戶端設定中引入了一個新的 Force Artifact Binding 選項,該選項會強制使用成品訊息與用戶端進行通訊。如需更多詳細資訊,請參閱伺服器管理指南。請注意,在此版本中,Keycloak SAML 用戶端轉接器不支援成品繫結。

感謝 AlistairDoswaldharture

支援身分仲介的 PKCE

Keycloak 現在可以在仲介到外部 OpenID Connect IdP 時利用 PKCE。

感謝 thomasdarimont

預設角色處理改進

預設角色現在在內部儲存為通常命名為 default-roles-<realmName> 的新角色的複合角色。與直接將網域和所有用戶端預設角色指派給新建立的使用者或透過身分仲介匯入的使用者不同,現在只將角色指派給他們,其餘預設角色則指派為有效角色。此變更可提高預設角色處理的效能,尤其是在用戶端數量較多的情況下,因為不再需要遍歷所有用戶端。

Keycloak 12.0.0

重點

Keycloak.X 發行版預覽

介紹新的即將推出的 Keycloak.X 發行版的預覽版。此發行版由 Quarkus 提供支援,可大幅提高啟動時間和記憶體消耗,並使配置 Keycloak 更加容易。

新的帳戶控制台現在是預設值

新的帳戶控制台不再是預覽功能,現在是 Keycloak 中的預設帳戶控制台。舊的帳戶控制台將繼續保留一段時間。對於那些擁有舊帳戶控制台自訂主題的人,預設會使用舊控制台,讓您有時間將您的自訂主題更新到新的帳戶控制台。

OpenID Connect 回溯通道登出

感謝 DaSmoobenjamin37,現在可以使用 OpenID Connect 回溯通道登出。

升級到 Wildfly 21

Keycloak 伺服器已升級,使用 Wildfly 21 作為底層容器。

在 SAML 身分提供者中請求 AuthnContext 的能力

已新增支援在 SAML 身分提供者發出的驗證請求中指定 AuthnContext 區段。

感謝 lscorcia

FAPI RW 支援與用戶端政策的初始支援

為了支援金融級 API 讀取和寫入 API 安全性設定檔 (FAPI RW),做了許多工作。這可透過使用用戶端政策來實現,目前仍處於預覽狀態。您可以在下個版本中看到更多完善。感謝 Takashi NorimatsuFAPI 特別興趣小組的所有成員。

將登入主題升級至 PatternFly 4

Keycloak 登入主題元件已升級至 PatternFly 4。舊的 PatternFly 3 與新的版本同時執行,因此有可能在那裡擁有 PF3 元件。

登入主題的設計也進行了變更,以提供更好的使用者體驗。您甚至可以為自訂的身分提供者定義圖示。詳細資訊,請參閱文件

Gatekeeper 終止生命週期

Gatekeeper 在 21 年 11 月已終止生命週期。這表示我們不再支援或更新它。公告請見這裡

其他改進

  • 支援 OAuth2 用戶端憑證授權,無需重新整理權杖且無需使用者工作階段。感謝 Thomas Darimont

  • 支援將存取權杖傳送至 OAuth2 撤銷端點

Keycloak 11.0.0

重點

LDAPv3 密碼修改作業

已新增對 LDAPv3 密碼修改作業的支援。管理控制台中也新增了可從已設定的 LDAP 伺服器請求中繼資料,以查看它是否支援 LDAPv3 密碼修改作業的功能。

感謝 cachescrubber

LDAP 群組對應器的命名空間支援

LDAP 群組對應器的命名空間支援,可讓您將 LDAP 中的群組對應至 Keycloak 群組樹狀結構的指定分支 (命名空間) 下。先前,LDAP 中的群組一律會新增為 Keycloak 中的最上層群組。

升級至 WildFly 20

Keycloak 伺服器已升級,在底層使用 WildFly 20.0.1.Final。如需詳細資訊,請參閱升級指南

SAML POST 繫結在最新版本的瀏覽器中已損毀

JSESSIONID Cookie 的 SameSiteNone 對於 Keycloak SAML 配接器的正確運作是必要的。當使用 SAML POST 繫結時,使用不同的值會導致每次對 Keycloak 發出請求時,都重設容器的工作階段。請參閱以下適用於 WildFly 和 EAP 的 Keycloak SAML Galleon 功能套件指南的步驟,以保持正確的行為。請注意,此因應措施也應該適用於先前版本的配接器。

其他改進

Keycloak 10.0.0

重點

身分代理同步模式

使用身分代理同步模式,現在可以控制使用者設定檔是在第一次登入時更新,還是每次從外部身分提供者登入時更新。也可以在個別的對應器上覆寫此行為。

感謝 Martin Idel

適用於 OpenID Connect / OAuth 2.0 的用戶端工作階段逾時

通常,SSO 工作階段會持續數天甚至數個月,而個別的用戶端工作階段最好應該短得多。透過導入用戶端工作階段逾時,現在可以為個別用戶端設定獨立的逾時,以及領域內所有用戶端的預設逾時。

OAuth 2.0 權杖撤銷 (RFC 7009)

對於使用 Keycloak 作為 OAuth 2.0 授權伺服器的應用程式,現在支援透過權杖撤銷端點撤銷重新整理權杖。

安全性標頭 SPI 和回應篩選器

導入了新的 SPI,以便在回應中設定安全性相關標頭時,可以更具彈性。這在 Keycloak 中提供更簡潔的實作,而且在需要時也允許完整的自訂。現在由回應篩選器設定安全性標頭,而不是在程式碼本身中設定,這使其更不容易出錯,並消除某些回應遺失標頭的可能性。

升級至 WildFly 19

Keycloak 伺服器已升級,在底層使用 WildFly 19。

其他改進

  • 將呼叫應用程式啟動的動作的支援新增至 Keycloak JavaScript 配接器

  • 改善評估期間擷取資源和政策的效能

Keycloak 9.0.1

重點

從 JavaScript 配接器移除 PromiseType

已從 JavaScript 配接器移除 promiseType init 選項。而是傳回一個支援原生 Promise API 和舊版 Keycloak Promise API 的 Promise。這允許將應用程式從舊版/已淘汰的 API 逐步移轉至原生 Promise API。

其他改進

還原 LocaleSelectorSPI 的重大 API 變更

在 9.0.0 中,向 LocaleSelectorSPI 導入了重大 API 變更。在 9.0.1 中,現在已還原對此 API 的變更,並導入了新的 LocaleUpdaterSPI。

修正 Spring Boot 應用程式自動解析 KeycloakConfigResolver 執行個體的問題

在先前的版本中,Spring Boot 應用程式必須手動實作 KeycloakConfigResolver 介面,或擴充內建的 org.keycloak.adapters.springboot.KeycloakSpringBootConfigResolver

此版本會自動解析執行個體 (在沒有提供任何執行個體的情況下),以修正回溯相容性問題。並且仍然允許應用程式提供其自身的組態解析器實作。

Keycloak 9.0.0

重點

已移除 Drools 政策

在淘汰期之後,最終移除了 Drools 政策。如果需要更複雜的政策,仍然可以使用以 JavaScript 為基礎的政策。

用戶端的分頁支援

已在管理控制台和 REST API 中將分頁支援新增至用戶端。感謝 saibot94

新的 Elytron 認證儲存庫保管庫提供者

已將一個新的內建保管庫提供者新增為 WildFly 擴充功能,該提供者會從金鑰儲存庫支援的 Elytron 認證儲存庫讀取祕密。認證儲存庫的建立和管理由 Elytron 使用 elytron 子系統或 elytron-tool.sh 指令碼來處理。

W3C WebAuthn 和驗證流程的更多更新

在此版本中,我們對驗證流程進行了一些可用性改進。終端使用者應該更容易在可用於雙因素驗證的驗證機制之間進行選擇。考慮到使用者可能擁有多個 OTP 或 WebAuthn 認證的事實,使用 OTP 或 WebAuthn 登入應該更加直觀。密碼無 WebAuthn 驗證也具有更好的支援。最後,我們對與驗證流程相關的缺陷進行了一些處理。

改善使用者地區設定的處理

針對如何選取登入頁面的地區設定,以及何時更新使用者的地區設定進行了許多改進。

其他改進

  • 現在,當類型為 Gatekeeper 上的 Bearer 時,才會考慮授權標頭權杖。感謝 HansK-p

  • 支援更多用於簽署用戶端祕密 JWT 的用戶端驗證演算法。新增了 HS384 和 HS512 演算法。感謝 tnorimat

Keycloak 8.0.2

重點

從 80 版開始,Google Chrome 會將 SameSite Cookie 參數的預設值變更為 Lax。因此,需要對數個 Keycloak Cookie (尤其是那些在 Javascript 配接器中用於使用 iframe 檢查工作階段狀態的 Cookie) 進行變更,以將 SameSite 參數設定為 None。請注意,此設定也需要設定 Secure 參數,因此從此版本開始,Javascript 配接器只有在 Keycloak 端使用 SSL/TLS 連線時才能完全正常運作。

Keycloak 8.0.1

重點

LDAP 問題

此版本修正了 Keycloak 7 中導入的 LDAP 中的嚴重弱點。如果您在生產環境中使用 Keycloak 7.0.0、7.0.1 或 8.0.0,強烈建議您立即升級。

WildFly 18.0.1.Final

升級至 WildFly 18.0.1.Final,其中包括對第三方程式庫中數個 CVE 的更新。

Keycloak 8.0.0

重點

保管庫

數個組態欄位可以從保管庫取得其值,而不是直接輸入值:LDAP 繫結密碼、SMTP 密碼和身分提供者祕密。

此外,還導入了新的保管庫 SPI,以啟用從自訂保管庫存取祕密的擴充功能開發。

新的預設主機名稱提供者

固定和請求主機名稱提供者已替換為單一新的預設主機名稱提供者。此提供者具有多項改進,包括

  • 無需變更提供者即可設定固定的基本 URL

  • 支援前端和後端請求的不同基本 URL

  • 在透過反向 Proxy 以不同內容路徑公開 Keycloak 的情況下,支援變更內容路徑

主題資源中的訊息

主題資源中的訊息組合可啟用自訂提供者 (例如驗證器) 的國際化。它們也在所有主題類型之間共用,因此可以共用例如登入和帳戶主控台之間的訊息。感謝 micedre

適用於 SAML 配接器的 RoleMappingsProvider SPI

我們新增了一個新的 SPI,允許配置自訂角色映射器,SAML 适配器會使用這些映射器將從 SAML 斷言中提取的角色映射到 SP 應用環境中存在的角色。當适配器需要與第三方 IDP 通訊,且 IDP 在斷言中設定的角色與 SP 應用程式定義的角色不符時,這特別有用。要使用的提供者可以在 keycloak-saml.xml 檔案或 keycloak-saml 子系統中進行設定。此外,我們也提供了一個基於屬性檔案內容執行角色映射的實作。

請注意,當 Keycloak 作為 IDP 時,我們可以利用內建的角色映射器,在將角色設定到斷言之前執行任何必要的映射,因此在這種情況下,此 SPI 可能會是多餘的。RoleMappingsProvider SPI 的設計目的是用於 IDP 無法在將角色新增至斷言之前進行映射的情況。

WildFly 18 升級

Keycloak 伺服器已升級為在底層使用 WildFly 18。

W3C Web 身份驗證支援

在此版本中,我們加入了對 W3C Web 身份驗證 (WebAuthn) 的初步支援。目前實作存在一些限制,但我們正在努力改進這個領域。感謝 tnorimat 的貢獻。也感謝 ynojima 的幫助和回饋。

支援無密碼驗證、多因素驗證和每位使用者多個憑證

隨著 W3C Web 身份驗證支援的到來,我們改進了身份驗證流程系統,以便讓使用者能夠選擇首選的登入驗證方法(例如,在 OTP 憑證和 WebAuthn 憑證之間選擇)。新的機制也允許管理員為無密碼登入設計流程,例如僅使用 WebAuthn 作為身份驗證方法。請注意,隨著這些變更,您建立的任何自訂身份驗證流程可能需要適應新的流程邏輯。

由於這些變更,使用者現在可以擁有多個 OTP 裝置和多個 WebAuthn 裝置。允許使用者在登入期間選擇要使用的裝置類型的相同系統,也允許該使用者選擇要使用的特定裝置。感謝 Cloudtrust 團隊:AlistairDoswaldsispeoFratt 的貢獻,以及 hartureLaurent 的幫助。

其他改進

theme.properties 中支援系統屬性和環境變數

現在可以在 theme.properties 檔案中使用系統屬性和環境變數。感謝 Opa-

支援使用簽署的 JWT 進行客戶端身份驗證的更多簽署演算法

感謝 tnorimat,我們支援使用簽署的 JWT 進行客戶端身份驗證的更多簽署演算法。

OIDC 身份提供者的可配置客戶端身份驗證方法

在此版本中,新增了使用簽署的 JWT 或基本身份驗證對 OIDC 提供者進行身份驗證的可能性。因此,現在支援 OIDC 規範中提及的所有客戶端身份驗證方法。感謝 madgaetrradillen 的貢獻。

支援啟用/停用 JavaScript 适配器的日誌記錄

感謝 jonkoops,現在可以啟用或停用 JS 适配器的日誌記錄。

從 JavaScript 适配器中移除憑證支援

已移除在 JavaScript 适配器中提供客戶端憑證的選項。感謝 jonkoops

Gatekeeper 的更新

  • 安全令牌和登出端點已包含在 Gatekeeper 中。感謝 fredbi

  • Gatekeeper 存在一個錯誤,導致 Cookie 應用於子網域。感謝 daniel-ac-martin,此問題已解決

  • 現在 Gatekeeper 提供對 Same-site Cookie 的支援。感謝 fiji-flo

將腳本部署到伺服器

請參閱 7.0.1 版本說明,瞭解有關如何部署和執行腳本以自訂特定行為的更多詳細資訊。

Keycloak 7.0.1

將腳本部署到伺服器

到目前為止,管理員可以透過 Keycloak 管理控制台以及 RESTful 管理 API 將腳本上傳到伺服器。

從現在開始,此功能預設為停用,使用者應優先選擇直接將腳本部署到伺服器。有關更多詳細資訊,請參閱 JavaScript 提供者

Keycloak 7.0.0

重點

WildFly 17 升級

Keycloak 伺服器已升級為在底層使用 WildFly 17。

Tomcat 9 适配器支援

Apache Tomcat 8 和 Apache Tomcat 9 的 Java 适配器已整合,現在適用於兩者。

新帳戶控制台

新帳戶控制台和帳戶 REST API 已完成大量工作。它尚未完全準備就緒,但正在逐步完成,並且希望在 Keycloak 8 中完全完成。

簽署和加密的 ID 令牌支援

Keycloak 可以根據 Json Web Encryption (JWE) 規範支援簽署和加密的 ID 令牌。感謝 tnorimat

測試和發佈自動化

Keycloak 團隊在 Keycloak 和 Red Hat Single Sign-On 的測試和發佈自動化方面投入了大量的時間。

其他改進

  • JavaScript 适配器中新增了 PKCE 支援。感謝 thomasdarimont

  • Keycloak 容器映像中新增了 Oracle 資料庫支援。感謝 nerdstep

  • SAML 适配器中新增了時鐘偏差支援。感謝 steevebtib

  • Node.js 适配器的 TypeScript 支援。感謝 evanshortiss

  • Gatekeeper 現在允許在標頭中提供未加密的令牌,同時在 Cookie 中加密。當 Keycloak 伺服器上啟用 Revoke Refresh Token 時,Gatekeeper 也存在一個錯誤。此問題已解決。感謝 fredbi

  • 管理控制台中的新索引標籤,用於顯示客戶端角色的使用者清單。感謝 unly

Keycloak 6.0.0

WildFly 16 升級

Keycloak 伺服器已升級為在底層使用 WildFly 16。

SmallRye Health 和 Metrics 擴充功能

Keycloak 現在已啟用 SmallRye Health 和 Metrics 擴充功能,這些擴充功能提供標準的健康狀況和指標端點。我們將盡快新增一些文件以及 Keycloak 特定指標。

PS256 支援

感謝 tnorimat,Keycloak 現在支援使用 PS256 簽署和驗證令牌。

MP-JWT 客戶端範圍

新的內建客戶端範圍,可輕鬆發出遵循 Eclipse MicroProfile 規範的令牌。

Keycloak 5.0.0

WildFly 15 升級

Keycloak 伺服器已升級為在底層使用 WildFly 15。

Keycloak 4.8.0.Final

OpenShift 整合

現在可以使用 Keycloak 完全保護 OpenShift 3.11,包括能夠自動將服務帳戶作為 OAuth 用戶端公開為 Keycloak 的用戶端。

這目前是一項技術預覽功能。

規則/Drools 策略標記為技術預覽功能

到目前為止,預設啟用 Drools 策略。但現在,此策略類型僅作為技術預覽功能提供,要使用它,您需要啟用預覽設定檔或相應的功能。請參閱 授權服務指南,瞭解更多詳細資訊。

移除 DB2 的支援

DB2 支援已過時一段時間。在此版本中,我們已移除所有對 DB2 的支援。

Keycloak 4.7.0.Final

增強的「記住我」功能

引入了為「記住我」工作階段指定不同工作階段閒置和最大逾時的功能。這使得「記住我」工作階段可以比常規工作階段存活更長時間。

群組的分頁支援

大量群組先前曾在管理控制台中導致問題。現在,透過引入群組分頁已解決此問題。

使用大量離線工作階段縮短啟動時間

過去,如果存在大量離線工作階段,則啟動伺服器可能需要很長時間。現在已大幅縮短此啟動時間。

Keycloak 4.6.0.Final

升級至 WildFly 14

Keycloak 伺服器已升級為在底層使用 WildFly 14。

Keycloak Gatekeeper

Keycloak Gatekeeper 提供了一個安全 Proxy,可用於保護應用程式和服務,而無需适配器。它可以與您的應用程式一起在本機安裝,或作為 OpenShift 或 Kubernetes 上的 Sidecar 安裝。

非常感謝 gambol99 為 Keycloak 貢獻此工作。

Keycloak 4.5.0.Final

簽名 SPI

簽名 SPI 允許插入其他簽名演算法。這允許使用其他簽名,也允許變更簽名的產生方式。例如,使用此功能允許使用 HSM 裝置簽署令牌。

感謝 tnorimat 為此工作貢獻了重要部分。

新的簽名演算法

除了簽章 SPI 之外,現在也支援其他簽章演算法。

Keycloak 現在支援 RS256、RS384、RS512、ES256、ES384、ES512、HS256、HS384 和 HS512。

橢圓曲線數位簽章演算法 (ES256/384/512) 非常有趣,因為它們提供與 RSA 簽章相似的安全性特性,但使用的 CPU 資源明顯較少。

當您不希望應用程式本身驗證簽章時,HMAC (HS256/384/512) 也非常有用。由於這些是對稱簽章,只有 Keycloak 才能驗證簽章,這要求應用程式使用令牌內省端點來驗證令牌。

感謝 tnorimat 為此工作貢獻了重要部分。

為 OpenID Connect 用戶端提供更好的受眾支援

現在可以指定為 OpenID Connect 用戶端發出的令牌中的受眾。也支援在配接器端驗證受眾。

小改進

  • 新增 LocaleSelector SPI,允許變更特定請求解析地區設定的方式。感謝 knutz3n

  • 新增驗證器,以便在首次 Idp 驗證後,自動將身分識別提供者的身分連結到現有帳戶。感謝 slominskir

Keycloak 4.4.0.Final

升級至 WildFly 13

Keycloak 伺服器已升級為在底層使用 WildFly 13。這意味著底層相依性的更新,以及組態中的一些變更。我們現在也支援 WildFly 13 配接器,並且針對跨資料中心設定升級了底層 JDG/Infinispan 伺服器版本。詳情請參閱升級指南

在 Node.js 中支援授權服務

在 Node.js 中支援授權服務,使得使用 Node.js 配接器進行細緻的集中授權變得非常容易。

小改進

  • 更新歡迎頁面的設計

  • 允許將目前的地區設定傳遞給 OAuth2 IdP。感謝 knutz3n

  • 支援「僅報告」內容安全策略 (Content-Security-Policy-Report-Only) 安全標頭。感謝 knutz3n

  • 用於 SAML 的指令碼型 ProtocolMapper。感謝 AlistairDoswald

Keycloak 4.3.0.Final

主機名稱 SPI

主機名稱 SPI 引入了更彈性的方式來設定 Keycloak 的主機名稱。有兩個內建的供應商。第一個是請求,它使用請求標頭來確定主機名稱。第二個是固定,它允許設定固定的主機名稱。後者確保只能使用有效的主機名稱,也允許內部應用程式透過替代 URL 呼叫 Keycloak。

如需更多詳細資訊,請參閱伺服器管理指南中的威脅緩解章節。

X509 用戶端驗證器

新加入的用戶端驗證器使用 X509 用戶端憑證和相互 TLS 來保護來自用戶端的連線。此外,Keycloak 伺服器會驗證用戶端憑證的「主體 DN」欄位。

授權服務的效能改進

在此版本中,我們全面改進了原則評估效能,提高了可靠性和吞吐量。我們進行的主要變更與試圖透過避免不必要的流程並在決策發生時立即收集決策來最佳化原則評估路徑有關。我們還在每個請求的基礎上引入了原則決策快取,避免了先前評估過的原則的冗餘決策。

我們也正在開發其他快取層,這應該會提供更好的體驗。請參閱KEYCLOAK-7952

從伺服器取得權限時選擇回應模式

在先前的版本中,權限總是使用標準 OAuth2 回應從伺服器傳回,其中包含存取和重新整理令牌。在此版本中,用戶端可以使用 response_mode 參數來指定伺服器應如何回應授權請求。此參數接受兩個值

  • decision

    表示回應應僅包含一個標誌,指示伺服器是否已授予權限。否則,將傳回 403 HTTP 狀態代碼。

  • permissions

    表示回應應包含伺服器使用 JSON 格式授予的每個權限。

NodeJS 原則執行器

適用於 NodeJS 的配接器 keycloak-nodejs-connect 現在支援根據伺服器採取的決策來保護資源的建構。新的建構允許使用者使用細緻的權限來保護其資源,如下所示

app.get('/protected/resource', keycloak.enforcer('resource:view'), function (req, res) {
  res.json({message: 'access granted'});
});

支援 Google 登入的託管網域

使用 Google 登入現在支援 hd 參數,以將 Google 登入限制為 Google 的特定託管網域。當在身分識別提供者中指定此參數時,會拒絕來自其他網域的任何登入。

感謝 brushmate 的貢獻。

逸出 HTML 輸出中的不安全標籤

大多數 HTML 輸出已經逸出 HTML 標籤,但在某些地方允許使用 HTML 標籤。這些僅限於需要管理員存取權才能更新值的位置。儘管更新這些欄位需要管理員存取權,但我們還是增加了額外的防禦層,現在正在逸出不安全元素,例如 <script>

Keycloak 4.2.0.Final

Cordova 的瀏覽器索引標籤支援

我們現在支援在 Cordova 的 JavaScript 配接器中使用瀏覽器索引標籤和通用連結。這可啟用多個應用程式之間的 SSO,並提高安全性。

感謝 gtudan 的貢獻。

SAML 配接器多租戶支援

SAML 配接器現在可以像 OpenID Connect 的內建配接器一樣支援多租戶。

建立包含點 (.) 的宣告的選項

在先前的版本中,無法使用包含點 (.) 字元的宣告名稱在令牌中建立宣告。現在可以在設定中逸出點字元,因此可以使用包含點字元的宣告名稱。

Keycloak 4.1.0.Final

將 Spring Boot 2 設定為預設入門工具

從 4.1 版開始,Spring Boot 入門工具將基於 Spring Boot 2 配接器。如果您使用的是較舊的 Spring Boot 版本,則可以使用 keycloak-legacy-spring-boot-starter。

Keycloak 4.0.0.Final

用戶端範圍和 OAuth 2 範圍參數的支援

我們新增了對用戶端範圍的支援,這取代了用戶端範本。用戶端範圍是一種更彈性的方法,並且也為 OAuth scope 參數提供了更好的支援。

同意畫面中與用戶端範圍相關的變更。同意畫面上的清單現在連結到用戶端範圍,而不是協定對應器和角色。

如需更多詳細資訊,請參閱文件和移轉指南。

OAuth 2 憑證繫結存取令牌

我們現在已部分實作 OAuth 2.0 相互 TLS 用戶端驗證和憑證繫結存取令牌 規格。更準確地說,我們支援憑證繫結存取令牌。如果您的機密用戶端能夠使用雙向 SSL,Keycloak 將能夠將用戶端憑證的雜湊新增到為該用戶端發出的令牌中。目前,只有 Keycloak 本身會驗證令牌雜湊(例如在 refresh token 請求期間)。我們計劃也新增對配接器的支援。我們還計劃新增對相互 TLS 用戶端驗證的支援。

感謝 tnorimat 的貢獻。

授權服務

UMA 2.0 支援

授權服務現在支援 UMA 2.0。如果您是從舊版 Keycloak 遷移而來,請查看文件以取得更多詳細資訊。

透過 Keycloak 帳戶服務的使用者管理存取權

現在,終端使用者能夠透過 Keycloak 帳戶服務管理其資源和與之關聯的權限。從那裡,資源擁有者現在可以檢查其資源、與其他使用者共用資源,以及核准來自其他使用者的請求。

非同步授權流程

使用 UMA 時,用戶端應用程式現在可以選擇授權請求是否應啟動授權流程,以要求資源擁有者核准。此功能允許應用程式在代表其他使用者嘗試存取其資源時,要求資源擁有者核准。

使用者管理權限 API

資源伺服器現在能夠將其他原則與特定使用者擁有的資源關聯。新的 API 提供使用不同原則類型(例如角色、群組、使用者、用戶端或使用 JavaScript 的條件)來管理這些權限的操作。

推送宣告

用戶端應用程式現在能夠連同授權請求一起將任意宣告傳送給 Keycloak,以便根據這些宣告評估權限。當需要在特定交易的範圍內或基於執行階段的資訊授予(或拒絕)存取權時,這是一個非常方便的補充。

資源屬性

現在可以將屬性與受 Keycloak 保護的資源關聯,並使用這些相同的屬性來評估來自您原則的權限。

原則執行器現在接受一般存取令牌

在某些情況下,您可能只想將一般存取令牌傳送到資源伺服器,但仍然能夠在這些資源上執行原則。

此版本引入的主要變更之一是,您不再需要在不使用 UMA 時,將存取令牌與 RPT 交換,才能存取受資源伺服器保護的資源。根據資源伺服器端原則執行器的設定方式,您可以僅將一般存取令牌作為不記名令牌傳送,並且仍然會強制執行權限。

原則執行器現在可以依需求從伺服器載入資源

到目前為止,當部署配置了 policy-enforcer 的應用程式時,策略執行器會從伺服器載入所有受保護的路徑,或者僅從配接器配置中映射這些路徑。現在,使用者可以決定從伺服器按需載入路徑,並避免在配接器配置中映射這些資源。根據您擁有的受保護資源數量,此功能還可以縮短部署應用程式的時間。

策略執行器現在支援配置資源快取

為了避免不必要地訪問伺服器,策略執行器會快取受保護資源與應用程式中相應路徑之間的映射。現在,使用者可以配置快取的行為,甚至完全停用它。

宣告資訊點

配接器(keycloak.json)上的 policy-enforcer 定義也已更新,以支援推送宣告的概念。其中有一個 claim-information-point 的概念,可以設定為從不同的來源推送宣告,例如 HTTP 請求,甚至是外部 HTTP 服務。

評估 API 的改進

用於在 Keycloak 中實施策略的評估 API,特別是 JavaScript 和 Drools 策略,現在提供了以下方法:

  • 存取來自當前領域的資訊,例如檢查使用者角色、群組和屬性

  • 將任意宣告推送回資源伺服器,以便提供有關如何強制執行特定許可的附加資訊

授權服務

UMA 2.0

授權服務現在支援 UMA 2.0,包括支援使用者透過帳戶管理控制台管理使用者存取權。授權服務還有其他新增功能和改進。

推送宣告

現在,客戶端可以推送額外的宣告,並在評估許可時由策略使用。

資源屬性

現在可以在資源上定義屬性,以便在評估許可時由策略使用。

主題和主題資源

現在可以透過常規提供者部署將主題熱部署到 Keycloak。我們還增加了對主題資源的支援,允許添加其他範本和資源,而無需建立主題。這對於需要將其他頁面添加到身份驗證流程的自定義身份驗證器非常有用。

我們還增加了支援,以覆蓋特定客戶端的主題。如果這不符合您的需求,那麼還有一個新的主題選擇器 SPI,允許您實施自定義邏輯來選擇主題。

Instagram 身份提供者

我們增加了使用 Instagram 登入的支援。感謝 hguerrero 的貢獻。

在管理控制台中按使用者 ID 搜尋

之前您必須編輯 URL 才能在管理控制台中按 ID 搜尋使用者。現在可以直接在使用者搜尋欄位中搜尋。

配接器

Spring Boot 2

我們現在支援 Spring Boot 2。

Fuse 7

我們現在支援 Fuse 7。

JavaScript - 原生 Promise 支援

JavaScript 配接器現在支援原生 Promise。它也保留了對舊式 Promise 的支援。兩者可以交替使用。

JavaScript - Cordova 選項

現在可以將 Cordova 特定的選項傳遞給 JavaScript 配接器中的登入和其他方法。感謝 loorent 的貢獻。