JWT (json web token)是目前最流行的使用者登入權限校驗(使用者認證鑒權)方案。
官網 https://jwt.io/
JWT 的工作流程
- 用戶端填寫賬号密碼通路登入接口 login,将賬号密碼傳給服務端
- 服務端驗證賬号密碼是否正确,若正确,則生成 token ,并将其傳回給用戶端
- 用戶端将登入接口 login 傳回的 token 存儲在用戶端本地
- 用戶端通路業務接口(如擷取目前登入使用者資訊 user/current)時,将 token 放入 header 中傳給服務端,鍵名為 Authorization ,值為 Bearer 後加空格再加 token。
- 服務端驗證 token 是否正确,若正确,則将資料(如目前登入使用者資訊)傳回給用戶端。
JWT 的 token 加密原理
JWT 的 token 由三部分組成
- Header:JSON對象,描述 JWT 的中繼資料,加密算法以及類型
- Payload:JSON對象,存放資料需要傳遞的資料
- Signature:對前兩部分的簽名,防止資料篡改。需要指定一個密鑰(secret)。這個密鑰隻有伺服器才知道,不能洩露給使用者。
JWT 的優點
- token 是無狀态的(stateless),伺服器不需要記錄任何資訊,不占用記憶體
- 多程序,多伺服器叢集沒有影響,易于擴充
- 假如不記錄在 cookie 中,沒有跨域的影響
- 和伺服器端解耦,任何裝置都可以生成token。
JWT 的缺點
- 無法廢棄,沒有辦法對快速對已經登入的使用者做處理。
- 空間更大,所有資料是通過 base64進行編碼的,會随着資料量的增大而變大。