【JAVA】JWT 與 cookie session
阿新 • • 發佈:2018-12-14
共享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各有各的好處,酌情考慮。