1. 程式人生 > >【JAVA】JWT 與 cookie session

【JAVA】JWT 與 cookie session

共享session相信大家都用過,為了解決http無狀態的問題,都會通過cookie、session共享來解決使用者狀態共享的問題,一般都是通過cookie來儲存sessionid,服務端通過sessionid在記憶體中取出使用者的資訊,做後續操作。但是在前後端分離越來越流行的情況下,cookie似乎不那麼通用了,出現了更好的解決方案——JWT ,  json  web  token

jwt由三部分構成,頭部、有效資料、簽名,這部分資料很小,可以放在http協議的任何部位進行傳輸,服務端收到後可直接進行業務處理,無需查詢快取、資料庫等,提高效能。

所以jwt最後的資料是這樣的

xxxxx.yyyyy.zzzzz

1、header包含兩部分內容

{
  "alg": "HS256",
  "typ": "JWT"
}

簽名演算法,和型別JWT

2、payload有效資料

{ "sub": "1234567890", "name": "John Doe", "admin": true }

3、簽名

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret)

對header進行base64.payload進行base64,然後對整個串進行hmacsha256加密

 

最後的JWT就是三段base64編碼中間通過.分開的一個字串

服務端收到這串字串,首先解密,驗籤,判斷資料是否正確,走後續的邏輯

 

有的人可能認為JWT不夠安全,因為payload會暴露有效資料,我個人認為,JWT的資料格式可以適當修改,其實無非就是放了個使用者id,以及許可權角色等資訊,應該夠了,為了提高安全性,可以每次都由服務端來返回這個JWT token,由前端下一次請求帶過來驗證,做到JWT token一次失效。

 

session JWT各有各的好處,酌情考慮。