(JSON Web Token)JWT,本質是一個token。算法
jwt的頭部承載兩部分信息:安全
載荷就是存放有效信息的地方。這個名字像是特指飛機上承載的貨品,這些有效信息包含三個部分服務器
標準中註冊的聲明 (建議但不強制使用) :cookie
公共的聲明 :
公共的聲明能夠添加任何的信息,通常添加用戶的相關信息或其餘業務須要的必要信息.但不建議添加敏感信息,由於該部分在客戶端可解密.網絡
私有的聲明 :
私有聲明是提供者和消費者所共同定義的聲明,通常不建議存放敏感信息,由於base64是對稱解密的,意味着該部分信息能夠歸類爲明文信息。session
jwt的第三部分是一個簽證信息,這個簽證信息由三部分組成:網站
這個部分須要base64加密後的header和base64加密後的payload使用.
鏈接組成的字符串,而後經過header中聲明的加密方式進行加鹽secret
組合加密,而後就構成了jwt的第三部分。編碼
1. 用戶導航到登陸頁,輸入用戶名和密碼,進行登陸
2. 服務器對登陸用戶進行認證,若是認證經過,根據用戶的信息和JWT的生成規則生成JWT Token
3. 服務器將該Token字符串返回
4. 客戶端獲得Token信息,將Token存儲在localStorage、sessionStorage或cookie等存儲形式中。
5. 當用戶請求服務器API時,在請求的Header中加入 Authorization:Token。
6. 服務端對此Token進行校驗,若是合法就解析其中內容,根據其擁有的權限和本身的業務邏輯給出響應結果,若是不經過,返回HTTP 401。
7. 用戶進入系統,得到請求資源加密
JWT自己的實現很是簡單,雖然很高效的完成了用戶認證,但網站的安全性問題是一個很是重要且關鍵的問題,經過上面的JWT生成過程咱們能夠很清楚的知道,JWT自己沒有作加密處理,都是經過Base64進行編碼後方便經過HTTP傳輸而已,Header和Payload信息都是能夠經過Base64解碼進行查看的。爲保證用戶密、密碼驗證過程的安全性,敏感信息須要在網絡中傳輸,Token信息也會在Request請求信息中看到,所以,這個過程建議將網站進行SSL加密傳輸,採用HTTPS協議,以確保通道的安全性。在Payload中儘可能少帶敏感性信息,只帶ID等無關網站安全的信息。spa