spec:
truststores:
mystore:
secret:
name: mystore-secret
myotherstore:
secret:
name: myotherstore-secret
2024 年 3 月 4 日
若要下載此版本,請前往 Keycloak 下載頁面。
使用者設定檔預覽功能已升級為完全支援,且預設啟用使用者設定檔。
在過去幾個月中,Keycloak 團隊投入大量精力來完善使用者設定檔功能,使其獲得完全支援。在此版本中,我們持續努力。根據我們優秀社群的徹底測試和回饋,進行了許多改進、修復和完善。
以下是此功能的一些重點:
對使用者和管理員可以管理的屬性進行精細控制,以便您可以防止設定非預期的屬性和值。
能夠指定要管理哪些使用者屬性,以及哪些屬性應在一般使用者或管理員的表單上顯示。
動態表單 - 過去,使用者建立或更新其設定檔的表單包含四個基本屬性,例如使用者名稱、電子郵件、名字和姓氏。新增任何屬性(或移除某些預設屬性)需要您建立自訂主題。現在可能不需要自訂主題,因為使用者會根據特定部署的需求,看到確切要求的屬性。
驗證 - 能夠為使用者屬性指定驗證器,包括內建的驗證器,您可以使用它們來指定最大或最小長度、特定正規表示式,或將特定屬性限制為 URL 或數字。
註解 - 能夠指定應如何呈現特定屬性,例如文字區域、具有指定選項的 HTML 選取項目或日曆,以及許多其他選項。您還可以將 JavaScript 程式碼繫結到特定欄位,以變更屬性的呈現方式並自訂其行為。
漸進式設定檔 - 能夠指定某些欄位僅針對 scope
參數的特定值是必填或可用的。這有效地允許了漸進式設定檔。您不再需要在註冊期間要求使用者填寫二十個屬性;您可以改為根據使用者使用的個別用戶端應用程式的需求,逐步要求使用者填寫屬性。
從先前版本遷移 - 使用者設定檔現在始終啟用,但對於未使用此功能的使用者,其運作方式與先前相同。您可以從使用者設定檔功能中受益,但並非必須使用它們。有關遷移說明,請參閱升級指南。
使用者設定檔作為受支援功能的第一個版本,僅僅是開始,也是交付更多關於身分管理功能的基礎。
我們要非常感謝優秀的 Keycloak 社群,因為許多想法、需求和貢獻都來自社群!特別感謝
有關使用者設定檔功能的更多詳細資訊,請參閱伺服器管理指南。
在此版本中,對使用者設定檔 SPI 的變更可能會影響基於此 SPI 的現有實作。有關更多詳細資訊,請參閱升級指南。
在此版本中,更新了以下範本,以便可以根據設定到領域的使用者設定檔組態動態呈現屬性
login-update-profile.ftl
register.ftl
update-email.ftl
有關更多詳細資訊,請參閱升級指南。
在此版本中,當使用者第一次透過代理進行驗證時,伺服器會使用 idp-review-user-profile.ftl
範本呈現更新設定檔頁面。
有關更多詳細資訊,請參閱升級指南。
早在 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 9.4 長期以來在社群中不受支援,並於 2022 年達到生命週期終止。同時,轉接器尚未更新或使用較新版本的 Jetty 進行測試。基於這些原因,此版本已移除 Jetty 轉接器。
重新設計了首次使用 Keycloak 時出現的「歡迎」頁面。它提供了更好的設定體驗,並符合最新版本的PatternFly。簡化的頁面佈局僅包含註冊第一個管理員使用者的表單。完成註冊後,使用者會直接傳送到管理主控台。
如果您使用自訂主題,則可能需要更新它以支援新的歡迎頁面。有關詳細資訊,請參閱升級指南。
我們在 Keycloak 22 中引入了第 3 版帳戶主控台作為預覽功能。在此版本中,我們將其設為預設版本,同時淘汰第 2 版,該版本將在後續版本中移除。
這個新版本內建支援使用者設定檔功能,該功能允許管理員設定使用者在帳戶主控台中可用的屬性,並在登入後讓使用者直接進入其個人帳戶頁面。
如果您正在使用或擴展此主題的自訂功能,則可能需要執行其他遷移。有關更多詳細資訊,請參閱升級指南。
package.json
中使用 exports
欄位Keycloak JS 轉接器現在在其 package.json
中使用 exports
欄位。此變更改善了對較新版捆綁器(如 Webpack 5 和 Vite)的支援,但會帶來一些無法避免的重大變更。有關更多詳細資訊,請參閱升級指南。
Keycloak JS 轉接器現在預設將 pkceMethod
選項設為 S256
。此變更會為所有使用轉接器的應用程式啟用程式碼交換證明金鑰 (PKCE)。如果您在不支援 PKCE 的系統上使用轉接器,則可以將 pkceMethod
選項設為 false
以停用它。
在此版本中,我們調整了密碼雜湊預設值,以符合OWASP 密碼儲存建議。
作為此變更的一部分,預設密碼雜湊提供者已從 pbkdf2-sha256
變更為 pbkdf2-sha512
。此外,基於 pbkdf2
的密碼雜湊演算法的預設雜湊反覆運算次數也已變更。此變更表示安全性更好,符合最新的建議,但會影響效能。可以透過將密碼原則 hashAlgorithm
和 hashIterations
新增到您的領域來維持舊的行為。有關更多詳細資訊,請參閱升級指南。
此版本包含對輕量存取權杖的支援。因此,您可以為指定的用戶端使用較小的存取權杖。這些權杖只有少數聲明,因此它們比較小。請注意,輕量存取權杖仍然是預設由領域金鑰簽署的 JWT,並且仍然包含一些非常基本的聲明。
此版本引入了新增至輕量存取權杖旗標,該旗標在某些 OIDC 通訊協定對應器上可用。使用此旗標來指定是否應將特定聲明新增到輕量存取權杖。它預設為關閉,這表示不會新增大多數聲明。
此外,還存在用戶端原則執行器。使用它來指定特定用戶端要求是否應使用輕量存取權杖或一般存取權杖。除了執行器之外,您也可以在用戶端進階設定中使用始終使用輕量存取權杖旗標,這會導致用戶端始終使用輕量存取權杖。如果您需要更高的彈性,執行器可以是替代方案。例如,您可以選擇預設使用輕量存取權杖,但僅針對指定的 scope 參數使用一般權杖。
先前的版本新增了新增至權杖內省切換。您可以使用它將存取權杖中不存在的聲明新增到內省端點回應中。
感謝 Shigeyuki Kabano 的貢獻,並感謝 Takashi Norimatsu 在此功能的協助和審閱。
此版本包含可選的 OAuth 2.1 支援。在此版本中引入了新的用戶端原則設定檔,管理員可以使用它們來確保用戶端和特定用戶端要求符合 OAuth 2.1 規格。機密用戶端存在專用的用戶端設定檔,而公開用戶端則存在專用的設定檔。感謝 Takashi Norimatsu 和 Shigeyuki Kabano 的貢獻。
從此版本開始,支援 OAuth2/OIDC 端點中用於重新整理權杖的 scope 參數。使用此參數來請求具有比最初授予的範圍更少範圍的存取權杖,這表示您無法增加存取權杖範圍。此範圍限制不會影響重新整理的重新整理權杖範圍。此功能的運作方式與 OAuth2 規格中所述相同。感謝 Konstantinos Georgilakis 的貢獻。
引入了新的用戶端原則執行器 secure-redirect-uris-enforcer
。使用它來限制用戶端可以使用哪些重新導向 URI。例如,您可以指定用戶端重新導向 URI 不能有萬用字元,應僅來自特定網域,必須符合 OAuth 2.1 標準等等。感謝 Lex Cao 和 Takashi Norimatsu 的貢獻。
引入了新的用戶端原則執行器 dpop-bind-enforcer
。如果啟用 dpop
預覽,您可以使用它來對特定用戶端強制執行 DPoP。感謝 Takashi Norimatsu 的貢獻。
您可以建立 EdDSA 領域金鑰,並將它們用作各種用戶端的簽章演算法。例如,您可以使用這些金鑰來簽署權杖或使用簽署的 JWT 進行用戶端驗證。此功能包括身分代理,其中 Keycloak 本身會簽署用於第三方身分提供者 private_key_jwt
驗證的用戶端聲明。感謝 Takashi Norimatsu 和 Muhammad Zakwan Bin Mohd Zahid 的貢獻。
用於提供 realm 金鑰的供應商 JavaKeystoreProvider
,現在除了先前支援的 RSA 金鑰外,還支援 EC 金鑰。感謝 Stefan Wiedemann 的貢獻。
OIDC 身分提供者現在有將 X.509 標頭新增至 JWT 的選項,適用於使用私鑰簽署的 JWT 進行用戶端驗證的情況。此選項對於與某些身分提供者(例如 Azure AD)互通性很有用,因為它們需要在 JWT 上存在憑證指紋。感謝 MT 的貢獻。
Keycloak 程式碼庫包含內部更新,以引入 OAuth 授權類型 SPI。此更新在引入 Keycloak OAuth 2 權杖端點支援的自訂授權類型時,提供了額外的彈性。感謝 Dmitry Telegin 的貢獻。
與 CORS 相關的 Keycloak 功能已提取到 SPI 中,這可以提供額外的彈性。請注意,CorsSPI
是內部的,未來版本可能會變更。感謝 Dmitry Telegin 的貢獻。
Keycloak 引入了改進的信任儲存庫配置選項。Keycloak 信任儲存庫現在用於整個伺服器,包括外發連線、mTLS 和資料庫驅動程式。您不再需要為個別區域配置單獨的信任儲存庫。要配置信任儲存庫,您可以將信任儲存庫檔案或憑證放在預設的 conf/truststores
中,或使用新的 truststore-paths
配置選項。詳細資訊請參閱相關的指南。
功能現在支援版本控制。為了保留向後相容性,所有現有功能(包括 account2
和 account3
)都標記為版本 1。新引入的功能將使用版本控制,這表示使用者可以在所需功能的不同實作之間選擇。
詳細資訊請參閱功能指南。
您也可以利用 Keycloak CR 新的伺服器端信任儲存庫處理功能,例如
spec:
truststores:
mystore:
secret:
name: mystore-secret
myotherstore:
secret:
name: myotherstore-secret
目前僅支援密鑰。
Kubernetes CA 的憑證會自動新增至由 Operator 管理的 Keycloak Pod 中。
現在可以將 SAML 身分提供者配置為從 IDP 實體中繼資料描述符端點自動下載簽署憑證。為了使用新功能,請在供應商中配置 中繼資料描述符 URL
選項(發佈帶有憑證的 IDP 中繼資料資訊的 URL),並將 使用中繼資料描述符 URL
設定為 開啟
。憑證會從該 URL 自動下載並快取在 public-key-storage
SPI 中。也可以使用供應商頁面中的動作組合,從管理主控台重新載入或匯入憑證。
有關新選項的更多詳細資訊,請參閱說明文件。
新增了位於 /lb-check
的新健康檢查端點。執行是在事件迴圈中進行的,這表示即使在 Keycloak 需要處理請求佇列中許多等待請求的超載情況下,此檢查也能做出回應。此行為在多站點部署中很有用,例如,可以避免故障轉移到負載過重的另一個站點。該端點目前正在檢查嵌入式和外部 Infinispan 快取的可用性。稍後可能會新增其他檢查。
預設情況下,此端點不可用。若要啟用它,請使用 multi-site
功能執行 Keyloak。有關更多詳細資訊,請參閱啟用和停用功能。
Keycloak CR 現在包含 startOptimized
欄位,可用於覆寫有關是否對開始命令使用 --optimized
標誌的預設假設。因此,即使使用自訂 Keycloak 映像,您也可以使用 CR 配置建置時選項。
在此版本中,我們正在封裝根使用者屬性(例如 username
、email
、firstName
、lastName
和 locale
),將它們移至基底/抽象類別,以便在使用管理和帳戶 REST API 時,對這些屬性進行編組和取消編組的方式保持一致。
此策略可確保用戶端管理屬性的一致性,並確保它們符合為 realm 設定的使用者設定檔配置。
有關更多詳細資訊,請參閱升級指南。
在此版本中,如果使用者已驗證並且該動作繫結到另一個使用者,則您無法再執行電子郵件驗證等動作。例如,如果電子郵件連結繫結到不同的帳戶,使用者將無法完成驗證電子郵件流程。
在此版本中,如果使用者嘗試點擊連結來驗證電子郵件,並且電子郵件先前已驗證,將會顯示正確的訊息。
除此之外,還會觸發新的錯誤 (EMAIL_ALREADY_VERIFIED
) 事件,以指示嘗試驗證已驗證的電子郵件。您可以使用此事件來追蹤在連結洩漏時,可能發生的劫持使用者帳戶的嘗試,或者在使用者無法識別該動作時提醒使用者。
Keycloak 的預設行為是按需載入離線會話。在啟動時預載入這些會話的舊行為現已棄用,因為在啟動時預載入它們無法隨著會話數量的增加而很好地擴展,並且會增加 Keycloak 的記憶體使用量。舊的行為將在未來版本中移除。
有關更多詳細資訊,請參閱升級指南。
為了減少記憶體需求,我們引入了一個配置選項,可以縮短匯入到 Infinispan 快取中的離線會話的生命週期。目前,預設情況下會停用離線會話生命週期覆寫。
有關更多詳細資訊,請參閱伺服器管理指南。
暴力破解保護有一些增強功能
當嘗試使用 OTP 或恢復代碼進行驗證因暴力破解保護而失敗時,使用中的驗證會話將會失效。任何進一步嘗試使用該會話進行驗證都會失敗。
在先前版本的 Keycloak 中,管理員必須選擇由於對其帳戶的暴力破解攻擊而暫時或永久停用使用者。管理員現在可以在給定次數的暫時鎖定後永久停用使用者。
failedLoginNotBefore
屬性已新增至 brute-force/users/{userId}
端點
在先前版本的 Keycloak 中,當刪除使用者、群組或用戶端原則的最後一個成員時,也會刪除該原則。不幸的是,如果該原則在聚合原則中使用,可能會導致權限升級。為了避免權限升級,效果原則不再刪除,管理員將需要更新這些原則。
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 現在允許指定 resources
選項,以管理 Keycloak 容器的運算資源。它提供了透過 Keycloak CR 為主要的 Keycloak 部署獨立請求和限制資源,以及透過 Realm Import CR 為 realm 匯入作業獨立請求和限制資源的功能。
如果未指定任何值,則預設 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 提供者。這為 Keycloak 處理的 Cookie 提供了更好的一致性,並且可以在需要時引入圍繞 Cookie 的配置選項。
用於 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
Keycloak 不再為初始和最大堆積大小指定硬編碼的值,而是使用相對於容器總記憶體的相對值。JVM 選項 -Xms
和 -Xmx
已被 -XX:InitialRAMPercentage
和 -XX:MaxRAMPercentage
取代。
如需更多詳細資訊,請參閱在容器中執行 Keycloak 指南。
隨著提供與 GELF 整合的底層函式庫停止維護,Keycloak 將不再支援開箱即用的 GELF 日誌處理程式。此功能將在未來版本中移除。如果您需要外部日誌管理,請考慮使用檔案日誌剖析。
將 Keycloak 部署到多個獨立站點對於某些環境來說至關重要,以提供高可用性和從故障中快速恢復的能力。此版本支援 Keycloak 的主動-被動部署。
若要開始使用,請使用高可用性指南,其中還包括將高可用性 Keycloak 部署到雲端環境的完整藍圖。
在升級之前,請參閱遷移指南以取得完整的變更清單。