最近,項目的安全認證機制全面採用JWT。如今,趁整個工做基本告一段落之際,將一些知識點總結一下發布出來。html
緣由很簡單,就如下幾點:html5
JWT由三部分組成:header + payload + signature,每部分是一個Json表示。最終的Token對這三部分進行編碼以後的字符串,中間用「.」分割:java
token = encodeBase64(header) + '.' + encodeBase64(payload) + '.' + encodeBase64(signature) # token is now: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJsb2dnZWRJbkFzIjoiYWRtaW4iLCJpYXQiOjE0MjI3Nzk2Mzh9.gzSraSYS8EXBxLN_oWnFSRgCzcmJmMjLiuyu5CSpyHI
在應用與服務器之間傳遞的就是上述字符串形式的Token。web
使用JWT的應用基本都遵循下面的使用流程:數據庫
對應的request header以下:編程
Authorization:Bearer <token>
整個過程以下圖:json
在通常的應用中,驗證成功以後,服務器可能會在Cookie或Session中保留一些用戶相關的額外信息,簡化後續的編程,同時避免反覆讀取數據庫。安全
在JWT,一樣能夠實現這樣的功能:只需將相應的內容放入payload便可。這樣,下次從客戶端發送的token中即可以解碼得出。服務器
驗證JWT的有效性時,會考慮至少下面兩點:cookie
整個過程的編碼其實並不複雜,請參見文後的連接,這裏再也不囉嗦。
出於安全性,注意如下幾點:
若是要在Cookie中保存Token【此時,服務器要同時驗證cookie或header中是否有token】
以上是對JWT的旋風式說明,其餘的內容,請參見參考文獻。