Logto 產品更新
Logto v1.43.0 加入了支援 OAuth Client ID Metadata Documents 的動態應用程式、已簽署的 SAML 認證請求、設有限制的 Custom JWT 與 Actions 執行環境、更嚴謹的權杖交換驗證,以及針對 webhook 與企業級 SSO 擴展的 SSRF 保護。
Logto v1.43.0 加入了支援 OAuth Client ID Metadata Documents 的動態應用程式、已簽署的 SAML 認證請求、設有限制的 Custom JWT 與 Actions 執行環境、更嚴謹的權杖交換驗證,以及針對 webhook 與企業級 SSO 擴展的 SSRF 保護。
Logto v1.43.0 擴展了應用程式與企業身分供應商的連接方式,同時鞏固對權杖和外部請求的安全防護。這次更新包括支援 OAuth Client ID Metadata Documents 的動態應用程式、已簽署的 SAML 認證請求,以及合併的 Custom JWT 與 Actions 執行環境 runtime。同時加強了權杖交換、webhook 及企業級 SSO 的安全防禦,還改善了帳戶中心、支援西班牙語 (墨西哥) 及可靠性修復。以下是重點更新內容。
登入體驗現已支援 es-MX(西班牙語,墨西哥)。
對於語言設定為西班牙語(墨西哥)的用戶,電話輸入預設為墨西哥國碼(+52)。本次更新修正了列表格式化的佔位符,以及西班牙語地區剩餘未翻譯的 MFA 訊息。
透過管理 API 設定的外部請求,若解析後指向 loopback、私有、link-local、雲端 metadata 或其他特殊用途的位址,現已被封鎖。
保護範圍包括:
POST /api/hooks/:id/test。DNS 名稱會在建立連線時檢查,因此指向受保護位址的 hostname 會如同字面 IP 位址一般遭拒。
除了要求第一方 subject 權杖外,Logto 現在還會驗證作為 access_token subject 提供的 JWT 是否真的是 access token。
JWT 必須包含:
at+jwt type 標頭。client_id 聲明。OIDC ID 權杖和其他由 tenant 簽名的 JWT 不再能替代 access token。無效的 subject 權杖將以 invalid_grant 拒絕。
第三方應用程式不再能透過帳戶 API 或驗證 API 變更帳戶資料。這類請求現在會回傳:
第一方應用(包括帳戶中心與 Console)不受影響。
對於無法解析的用戶端識別字,檢查會直接拒絕。這包括 access token 仍舊有效但應用已刪除,以及 id 為 metadata URL 的 CIMD 客戶端。
無讀取路由新增直接保護。不過,以下讀取需通過保護路由產生的驗證紀錄,因此第三方應用將無法再訪問:
GET /api/my-account/grantsGET /api/my-account/sessionsGET /api/my-account/mfa-verifications/backup-codes發放權杖和查詢用戶資訊現會以 invalid_grant 拒絕被停用的用戶,這行為與已刪除用戶相同。
此變更適用於 refresh token、授權碼、裝置碼,以及權杖交換流程,即使先前權杖或工作階段廢止未完成也一樣。
移除第三方應用的 user scope 同時會影響現有授權及新的授權請求。
invalid_scope 失敗。insufficient_scope 失敗。Sentinel 鎖定計數器現與帳戶查找一致,統一使用標準化的識別碼格式:
這可防止相同識別碼的不同拼法分開計數,減弱 maxAttempts 的效果。
手動解鎖也會一併清除等價拼法的帳戶鎖定。升級後,過往非標準拼法的鎖定紀錄可能提早結束,唯不會有人被加重鎖定。
redirect_to 值必須使用 http 或 https。ES256,P-384 採 ES384,P-521 採 ES512。invalid_scope 和 insufficient_scope 訊息現在會顯示遭拒的 scope,而不是原生 {{error_description}} 或 {{scope}} 佔位符。Accept-Language quality 值如 en; q=0.7 現可正確解析。無效的 quality 值會安全退回預設而不會產生 NaN。gmail.com 和 googlemail.com 視為等同,並忽略本地部分的點號。custom_profile_fields.entity_not_exists_with_names。POST /applications/:applicationId/user-consent-scopesPOST /organizations/:id/users/:userId/roles當 endpoint 回傳 HTTP 5xx,webhook POST 請求會最多重試三次,與文件中約定一致。
由於重試可能造成事件多次送達,webhook 接收端建議務必做 idempotent 處理。
Microsoft Azure AD 連接器現支援 disableEmailSync 選項。
預設情況下,連接器會同步 Microsoft Graph 的 mail 屬性到 Logto 用戶個人檔。開啟此選項時,將不會同步該地址,只用於驗證。此控制方式與 Azure OIDC 企業 SSO 已有功能相同。
需採取動作 — 外部請求保護:如 webhook 或企業 SSO 連接器需存取私網服務,請於升級前將所需 IP 或 CIDR 區段加入 SSRF_ALLOWED_ADDRESSES:
只允許所需目的地比全域停用保護更安全。
動態應用相容性:設定 SSRF_ALLOWED_ADDRESSES 會停用 CIMD,未經驗證的動態用戶端無法利用 allowlist 連通私有服務。設 SSRF_PROTECTION_DISABLED=true 亦會停用 CIMD。
組態相容性:OIDC_PROVIDER_SSRF_PROTECTION_DISABLED 仍作為 SSRF_PROTECTION_DISABLED 的別名保留。這些變數僅用於自架部署。
程式腳本執行時間限制:Custom JWT 及 Actions 腳本必須 5 秒內完成、記憶體不超過 128 MB,並回傳可被 JSON 序列化的值。
資料庫遷移說明:本版本包含新資料 schema 調整與索引。升級後需執行資料庫遷移指令(在 @logto/cli/core image 執行 npm run alteration deploy,或 logto db alteration deploy),再啟動新版。詳見 升級指南。
非常感謝下面社群成員的貢獻,讓本次更新得以推出:
Accept-Language quality 解析 (#9338)完整異動請見 完整變更日誌。