View a markdown version of this page

安全地剖析使用者集區字符 - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

安全地剖析使用者集區字符

Amazon Cognito 權杖的宣告集未修正。權杖攜帶的宣告會因身分驗證流程、使用者的群組成員資格和身分提供者,以及您在使用者集區上啟用的功能而有所不同。Amazon Cognito 會隨著時間累加新增宣告:它會引入新的金鑰,但不會重新命名、變更 的類型,或移除本指南所記載的現有宣告。這些規則同時適用於 ID 字符和存取字符。

請勿撰寫您自己的權杖剖析器。使用 JSON Web 權杖 (JWT) 程式庫和 JSON 剖析器,隨著權杖的增長持續運作。防止幾乎每個真實世界休息的兩個規則是以下前兩個:容忍您無法辨識的宣告,並對您讀取的每個宣告類型和基數做出正確的假設。

忽略您無法辨識的宣告

閱讀您的應用程式需要的宣告,並保留其餘宣告。當字符具有未列於本指南中的宣告時,請勿拒絕、失敗或擲回錯誤。新宣告會累加新增,且包含未列出宣告的權杖仍然有效。

讀取其文件類型的每個宣告

JSON 剖析器會從 JSON 本身識別每個值的基本類型,因此風險是在程式碼之後對該值所做的假設中。將每個宣告視為本指南文件的類型和基數。記錄為陣列的宣告一律是陣列,即使目前擁有單一值也一樣。請勿將其摺疊為字串。例如,cognito:groups、 cognito:roles和 一律identities是陣列。相同的原則適用於其他規格定義的宣告。例如,amr當存在時, 是 IETF 網站上 RFC 8176 中定義的字串陣列,因此請以該類型讀取。

請勿過度驗證宣告格式

驗證宣告的規格需要什麼,而不是更多。例如, sub 是唯一的字串,但不保證為任何特定的 UUID 格式。自訂宣告中的某些值identities,例如 會序列化為字串而非 JSON 布林值或數字,且不保證不透明值為任何特定長度。採用比文件狀態更嚴格的格式會導致有效的權杖失敗。

請勿假設宣告數量或其順序

權杖中的宣告可以任何順序顯示,而且權杖和 之間的計數可能會隨著時間而變更。依名稱而非位置處理每個宣告,並將字符剖析為一般 JSON 物件,而非固定結構。

字符大小成長的預算

由於宣告集增加,字符的整體大小也會增加。請勿在緩衝區、欄寬度、標頭或 Cookie 中擔任固定或最大字符大小。

openid-configuration 探索文件遵循相同的附加、向前相容方法。如需安全剖析該文件的詳細資訊,請參閱 準備對探索文件進行變更。