JWT基礎概念詳解

JWT基礎概念詳解JWT介紹

之前我們文章講過分布式session如何存儲,其中就講到過Token、JWT 。首先,我們來回顧一下使用Token進行身份認證 。
  1. 客戶端發送登錄請求到服務器
  2. 服務器在用戶登錄成功之后會生成一個token,此時這個token可能會被存儲到數據庫、Redis等,實現可以共享,服務端會把生成的token返回給客戶端
  3. 客戶端也會存儲這個token , 每次請求需要攜帶這個token即可 。
JWT是token的另一種方式,又有很多不同點 。JWT全稱是JSON Web Token,它的本質是一個字符串 , 它里面包含數據和簽名,接下來我們看看JWT是如何進行身份認證的 。
  1. 客戶端發送登錄請求到服務器
  2. 服務器在用戶登錄成功之后簽發一個JWT Token,之后會把這個token直接返回給客戶端,此時服務器端是不存儲任何用戶信息的 。
  3. 客戶端存儲JWT Token,每次請求時攜帶這個token
  4. 服務端在每次請求前,檢查傳過來的token,判斷簽名、過期時間,驗證通過后可以解析出token里面包含的用戶信息 。
JWT組成
JWT主要由3部分組成,分別是Header、payload、signature 。下面我們具體講講每部分的作用 。
Header
Header主要存儲token類型和簽名算法相關信息,例如
{"alg": "HS256","typ": "JWT"}
然后會把這個json字符串使用Base64進行編碼,作為JWT的Header部分 。
Payload
Payload主要是存儲信息的,里面可以存儲業務數據或者用戶信息, JWT有以下7個默認字段可以選用 。
  1. iss: Issure JWT簽發方
  2. iat: Issued at time JWT簽發時間
  3. sub: Subject JWT主題
  4. aud: Audience JWT接收方
  5. exp: Expiration time JWT過期時間
  6. nbf: Not before time JWT生效時間
  7. jti: JWT ID
下面我們舉個例子
{"sub": "123456","username": "admin"}
上面的json字符串會使用Base64進行編碼,作為JWT的Payload部分,Payload部分默認是不加密的,所以一定不要把隱私信息放在Payload當中 。
Signature
Signature是對上面兩部分的數據的簽名,對上面的Header和Payload數據 , 通過指定的算法生成Hash,防止數據被篡改 。下面是簽名的計算公式
【JWT基礎概念詳解】HMACSHA256(base64UrkEncode(header) + "." + base64UrlEncode(payload), secret)
在計算出簽名后,將上述的Header、Payload和Signature連接成一個字符串,中間使用"."進行分隔 , 這個就是最終的JWT 。
JWT和Token區別
  1. Token需要查詢進行驗證,JWT不需要,可以直接進行校驗 。
  2. Token需要存儲在服務器端 , JWT在服務器端不存儲任何信息 。
  3. Token可以在服務器端進行管理用戶,例如登出、禁用,JWT不可以 , JWT依賴客戶端刪除本地的JWT Token 。
原文鏈接:https://monkey.blog.xpyvip.top/archives/jwt-ji-chu-gai-nian-xiang-jie

    推薦閱讀