1. 程式人生 > >JSON web [email protected]#JWT Claims

JSON web [email protected]#JWT Claims

4. JWT Claims

JWT Claims Set 表示一個 JSON 物件,它的成員是 JWT 傳輸的 claims。JWT Claims Set 中的 Claim Names MUST 是唯一的; JWT 解析器 MUST 拒絕擁有重複 member name 的 JWTs,或者使用 JSON 解析 只返回 重複的成員 name 的最後一個詞彙,就像規範 ECMAScript 5.1 [ECMAScript] 的第 15.12 章節描述的那樣。

一個 JWT 包含的 claims 必須是一組有效的,依賴上下文的。這方面的描述超出了本規範的範圍。JWTs 特定的 applications 將要求實現某種特定的方法能夠明白和處理某些claims。然而,缺乏某些要求,所有的 claims, 在實現時,如果不明白它的一生,就 MUST 被忽略。

這裡有三種類型的 JWT Claim Names: Registered Claim Names, Public Claim Names, 和 Private Claim Names。

4.1. Registered Claim Names

下面的 Claim Names 是在 IANA “JSON Web Token Claims” 登記的,在章節 10.1. 中約定俗稱。就一切情況而論,下面定義的 claims 並不要求強制使用或實現。 而是在開始的時候提供一組使用的,有幫助的 claims。 Applications 使用 JWTs 應當定義他們使用哪些特定的claims,使用時是 required 還是 optional。所有的 names 都是簡短的,因為 JWTs 的核心目標是表達形式簡潔緊湊。

4.1.1. “iss” (Issuer) Claim

“iss” (issuer) claim 定義了釋出這個 JWT 的當事人。 如何處理這個 claim 是通常的應用程式指定。 “iss” 的值是大小寫敏感的字串,包含一個 StringOrURI 值。使用這個 claim 是 OPTIONAL。

4.1.2. “sub” (Subject) Claim

“sub” (subject) claim 定義了這個 JWT 的 subject。JWT中的 claims 通常是關於 subject 的陳述。subject 的值 MUST 是: issuer 上下文中的 scpoed,是本地唯一的,或者全域性唯一的。如何處理這個 claim 通常是應用程式指定。”sub” 的值是大小寫敏感的字串,包含一個 StringOrURI 值。使用這個 claim 是 OPTIONAL。

4.1.3. “aud” (Audience) Claim

“aud” (audience) claim 在 JWT 中用來標識收件人。每個打算處理 JWT 的當事人 MUST 在 audience claim 中用值來識別自己。如果有這個 claim,但處理這個 claim 的當事人無法用它的值識別自己,那麼 MUST 拒絕這個JWT。 在一般情況下,”aud” 的值是有區分大小寫的字串構成的陣列。每個字串都包含一個 StringOrURI 值。在特殊情況下,當 JWT 只有一個 audience,”aud” 的值可能是一個大小寫敏感的字串,它包含一個 StringOrURI 值。audience 的值的解譯一般由應用程式指定。使用這個 claim 是 OPTIONAL。

4.1.4. “exp” (Expiration Time) Claim

“exp” (expiration time) claim 標識了失效時間,當達到或超過這個時間時。JWT MUST NOT 接受和處理,處理 “exp” claim 要求當前的 date/time MUST 在 “exp” claim 標識的 date/time 之前。考慮到時鐘差, 實現者 MAY 留有一點餘地,通常不超過幾分鐘。它的值 MUST 是一個 number 型別,包含一個 NumericDate 值。使用這個選項是 OPTIONAL。

4.1.5. “nbf” (Not Before) Claim

“nbf” (not before) claim 標識了時間點, 當早於這個時間點,JWT MUST NOT 被接受和處理。 處理這個 “nbf” claim 要求當前的 date/time MUST 在 “nbf” claim 所顯示的 date/time 之後或者剛好在那個時間點。考慮到時鐘差,實現者 MAY 留有一點餘地,通常不超過幾分鐘。它的值 MUST 是一個 number 型別,包含一個 NumericDate 值。使用這個選項是 OPTIONAL。

4.1.6. “iat” (Issued At) Claim

“iat” (issued at) claim 標識了 JWT 所頒發的時間。這個 claim 能用於計算這個 JWT 已經使用的期限。它的值 MUST 是一個 number 型別,包含一個 NumericDate 值。使用這個選項是 OPTIONAL。

4.1.7. “jti” (JWT ID) Claim

“jti” (JWT ID) claim 作為 JWT 的唯一識別符號。這個識別符號的值 MUST 指定,在某種意思上確保相同的值在極小概率的情況下分配給另一個不同的資料物件。如果應用程式使用多個 issuers,MUST 避免不同頒發者所產生的值可能一樣的衝突。”jti” claim 可以用於避免 JWT 被重複傳送。”jti” 的值是大小寫敏感的。使用這個選項是 OPTIONAL。

4.2. Public Claim Names

Claim Names 可以被使用 JWTs 的人定義,然而,為了避免衝突,任何新的 Claim Name 應當滿足:要麼是 IANA “JSON Web Token Claims” registry 裡面(在 10.1 章節裡面制定)註冊的值,要麼是一個 Public Name:一個能夠防止命名衝突的 Name。在各種情況下,定義 name 或者 value 的人需要警惕他們定義的 Claim Name 在 namespace 中能夠得到控制。

4.3. Private Claim Names

JWT 的生產者和消費者可以約定他們所使用的 Claim Names 就是 Private Names:這些 names 既不是 Registered Claim Names(4.1 章節),也不是 Public Claim Names(4.2章節)。 不像 Public Claim Names,在使用Private Claim Names 應當謹慎,以防止引起衝突。