JSON Web Token學習筆記

1、什麼是JSON Web Token?

一、爲何使用JSON Web Token

JSON Web Token是cookie session機制的一種替代方案。
通常咱們用戶認證的流程是:算法

(1)用戶將用戶名和密碼發送給服務器
(2)服務器驗證並經過後,將信息存放在session
(3)返回給客戶端一個sessionId
(4)客戶端將sessionId保存在cookie
(5)客戶端後續的請求,都會將cookie一併發給服務器,裏面就包含了sessionId
(6)客戶端經過sessionId識別用戶數據庫

可是在跨域登錄狀況下(跨域即跨域名登錄,也就是可能會有好幾個不一樣的服務器),多個服務器須要共享session。這種狀況下使用JSON Web Token就會有更加方便。json

二、JSON Web Token的原理

JSON Web Token其實是一個JSON對象,使用流程爲:

(1)用戶將用戶名和密碼發送給服務器
(2)服務器將驗證並經過之後,生成JSON Web Token,併發送給客戶端
(3)客戶端將其保存在local storage 或本地數據庫
(4)下次客戶端再次發起請求,將 Token 附加到 header 中
(5)服務器徹底經過JSON Web Token來識別用戶跨域

這裏值得注意的是,爲了保證安全性,在第(2)步中,服務器會經過加密算法將Token加密,也就是說客戶端保存的是個加密的Token,到第(5)步服務器對其進行解密。安全

三、JSON Web Token的數據結構

Token通常爲三部分組成:Header.Payload.Signature
(1)Header(頭部):通常包含簽名的算法和令牌的屬性
(2)Payload(負載):實際須要傳遞的數據(通常不加密,所以不要把重要信息放在裏面
(3)Signature(簽名):Signature 部分是對前兩部分的簽名,防止數據篡改。格式通常以下(secret爲密鑰,只有服務器本身知道):服務器

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

四、特色

(1)使用 json 做爲數據傳輸,有普遍的通用型,而且體積小,便於傳輸
(2)不須要在服務器端保存相關信息,徹底經過Token來認證
(3)jwt 載荷部分能夠存儲業務相關的信息(非敏感的),例如用戶信息、角色等,所以也能夠用於交換信息。cookie

相關文章
相關標籤/搜索