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對象,使用流程爲:
‘
(1)用戶將用戶名和密碼發送給服務器
(2)服務器將驗證並經過之後,生成JSON Web Token,併發送給客戶端
(3)客戶端將其保存在local storage 或本地數據庫
(4)下次客戶端再次發起請求,將 Token 附加到 header 中
(5)服務器徹底經過JSON Web Token來識別用戶跨域
這裏值得注意的是,爲了保證安全性,在第(2)步中,服務器會經過加密算法將Token加密,也就是說客戶端保存的是個加密的Token,到第(5)步服務器對其進行解密。安全
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