JSON Web Token(JWT)是一個非常輕巧的規範。這個規範允許我們使用JWT在使用者和伺服器之間傳遞安全可靠的資訊。
構成
一個JWT實際上就是一個字串,它由三部分組成,頭部[包含型別以及簽名所用的演算法]header、載荷[JWT的標準所定義]payload與簽名signature。
base64加密後的header和base64加密後的payload使用.連線組成的字串,然後通過header中宣告的加密方式進行加鹽secret組合加密,然後就構成了jwt的第三部分
JWT=BASE64(header).BASE64(payload).sign(BASE64(header).BASE64(payload)+secret)
secreKey
secret是儲存在伺服器端的,jwt的簽發生成也是在伺服器端的,secret就是用來進行jwt的簽發和jwt的驗證,所以,它就是你服務端的私鑰,在任何場景都不應該流露出去。一旦客戶端得知這個secret, 那就意味著客戶端是可以自我簽發jwt了。
簽名的目的
優點
- 使用演算法代替持久層校驗,不需要在服務端儲存會話資訊, 易於應用的擴充套件
- 因為有了payload部分,所以JWT可以在自身儲存一些其他業務邏輯所必要的非敏感資訊
- 便於傳輸,jwt的構成非常簡單,位元組佔用很小,所以它是非常便於傳輸的
安全相關
- 保護好secret私鑰,該私鑰非常重要
- 不應該在jwt的payload部分存放敏感資訊,因為該部分是客戶端可解密的部分
- 使用https協議