JWT學習

什麼是JWT?

jwt的全稱是JSON Web Token;JSON Web
Token是一個開源標準(rfc7519),是一個輕量,攜帶着用戶信息的json
Object對象,安全的進行服務器端與客戶端交互;這個對象可以校驗、信任,因爲它由數字組成;
輕量:因爲輕量,所以可以更好地放在httpheader裏面,在服務器與客戶端之間快速交互
攜帶用戶信息:將用戶的重要信息:userId,userName等放在jwt當中,不用再次從數據庫當中獲取

什麼時候使用?

  1. 需要認證:用戶根據username、password登錄後,使用jwt返回一個token給客戶端,客戶端在請求的時候將token放在http
    header當中給服務器端,服務器端校驗token的合法性,然後處理請求的response

  2. 用戶信息被改變:

jwt的結構

基本結構

由header、payload、sinature三部分組成,最終以xxx.yyy.zzz的形式拼接

header由兩部分組成:

  • type of token : JWT
  • 加密算法: HMAC/SHA256/RSA

payload

payload裏面存放着用戶的信息,可以使用claims進行復合拼裝,claims由已定義、public、private三部分組成

  • resolved(已定義):iss/exp/sub/aud
  • public:url信息
  • private:用戶信息

payload當中的數據都可以由用戶自行設置

sinature

簽名,根據header、payload和一個用戶設置的密碼(secret),生成一個簽名,最後將header,payload,sinature拼接成xxx.yyy.zzz形式

怎麼使用(java)

pom.xml裏面引入jwt

<dependency>
 <groupId>io.jsonwebtoken</groupId>
 <artifactId>jjwt</artifactId>
 <version>0.7.0</version>
</dependency> 
 public static void main(String[] args) {
     String secret = "password";
     String userId = "zhangsan";
     String userName = "張三";

     // 輸出的jwt:eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ6aGFuZ3NhbiIsInVzZXJOYW1lIjoi5byg5LiJIn0.024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g
     String jwt = Jwts.builder().setSubject(userId).signWith(SignatureAlgorithm.HS256, secret)
         .claim("userName", userName).compact();
     System.out.println(jwt);
     // 客戶端將Jwt傳遞給服務器,服務器根據secret進行解密,可以對jwt進行校驗,取數據
     Jws<Claims> claims = Jwts.parser().setSigningKey(secret).parseClaimsJws(jwt);
     //header={alg=HS256},body={sub=zhangsan, userName=張三},signature=024kCUw4nodiXEdeOWtjWFn8u2eoh-DdfmLiXYgZs9g
     System.out.println(claims);

 }

由上面可以看出claims裏面存放的數據由header、body、signature三部分組成

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章