一張圖了解javaJwt


1.什么是javaJwt?

JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties.

JWT.IO allows you to decode, verify and generate JWT.https://jwt.io/

javaJwt is library of jwt implemented by java

2.javaJwt的類結構

術語解釋:

通常在傳輸數據時,為了使數據傳輸更可靠,要把原始數據分批傳輸,並且在每一批數據的頭和尾都加上一定的輔助信息,比如這一批數據量的大小,校驗位等,這樣就相當於給已經分批原始數據加一些外套,這些外套起到標示作用,使得原始數據不易丟失。
一批數據加上它的“外套”,就形成了傳輸通道中基本的傳輸單元,叫做數據幀或者數據包(有的地方數據幀和數據包不是同一概念比如網絡傳輸)。這些數據幀中的記錄信息的原始數據就是有效載荷數據,即payload data。
而消息體就是外套。即標記着原始數據的大小等的輔助信息。


1.The Header class represents the 1st part of the JWT, where the Header value is hold.

2.The Payload class represents the 2nd part of the JWT, where the Payload value is hold.

3.The Signature class represents the 3rd part of the JWT, where the Signature value is hold.

4.The JWTDecoder class holds the decode method to parse a given JWT token into it's JWT representation.

5.The JWTVerifier class holds the verify method to assert that a given Token has not only a proper JWT format, but also it's signature matches.

6.The JWTCreator class holds the sign method to generate a complete JWT (with Signature) from a given Header and Payload content.

 7.The Claim class holds the value in a generic way so that it can be recovered in many representations.

根據JWT的標准,這些claims可以分為以下三種類型: 
a. Reserved claims(保留),它的含義就像是編程語言的保留字一樣,屬於JWT標准里面規定的一些claim。JWT標准里面定好的claim有:

  • iss(Issuser):代表這個JWT的簽發主體;
  • sub(Subject):代表這個JWT的主體,即它的所有人;
  • aud(Audience):代表這個JWT的接收對象;
  • exp(Expiration time):是一個時間戳,代表這個JWT的過期時間;
  • nbf(Not Before):是一個時間戳,代表這個JWT生效的開始時間,意味着在這個時間之前驗證JWT是會失敗的;
  • iat(Issued at):是一個時間戳,代表這個JWT的簽發時間;
  • jti(JWT ID):是JWT的唯一標識。

b. Public claims,略(不重要)

c. Private claims,這個指的就是自定義的claim。比如前面那個結構舉例中的admin和name都屬於自定的claim。這些claim跟JWT標准規定的claim區別在於:JWT規定的claim,JWT的接收方在拿到JWT之后,都知道怎么對這些標准的claim進行驗證;而private claims不會驗證,除非明確告訴接收方要對這些claim進行驗證以及規則才行。

按照JWT標准的說明:保留的claims都是可選的,在生成payload不強制用上面的那些claim,你可以完全按照自己的想法來定義payload的結構,不過這樣搞根本沒必要:第一是,如果把JWT用於認證, 那么JWT標准內規定的幾個claim就足夠用了,甚至只需要其中一兩個就可以了,假如想往JWT里多存一些用戶業務信息,比如角色和用戶名等,這倒是用自定義的claim來添加;第二是,JWT標准里面針對它自己規定的claim都提供了有詳細的驗證規則描述,每個實現庫都會參照這個描述來提供JWT的驗證實現,所以如果是自定義的claim名稱,那么你用到的實現庫就不會主動去驗證這些claim。

參考文獻:

【1】http://www.cnblogs.com/lyzg/p/6028341.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM