簡介
JWT(JSON Web Token)是一種基於 JSON 格式的開放標準(RFC 7519),主要用於簡單的加密與認證,通常用來儲存身份與權限信息。在實際應用中,JWT 通常會被儲存在前端,並在發送請求時將其附加在 HTTP 標頭中(通常為 Authorization
標頭),伺服器則利用這個 JWT 來進行身份驗證和權限檢查。
結構
JWT 的結構由三個部分組成,中間使用點(.
)分隔:- 標題(Header):包含兩個主要內容,分別是 token 類型(通常為 JWT)與所使用的加密算法(如 SHA256 或 RSA)。
- 負載(Payload):包含儲存在 JWT 中的聲明(Claims),這些聲明描述了實體和其他相關數據,例如註冊聲明、公開聲明和私有聲明等。
- 簽名(Signature):將上述兩部分資料,結合密鑰和指定的加密算法,進行加密處理生成簽名。
特點
- 降低資料庫壓力:JWT 在 payload 中攜帶了所有必要的資料(例如使用者權限),因此避免了頻繁查詢資料庫進行身份驗證與授權。
- 靈活性:JWT 支援自定義 payload 內容,並且可選擇多種加密算法。
- 無狀態性:JWT 為無狀態的,這意味著伺服器不需要儲存任何資料,只需在需要時進行驗證。因此,JWT 特別適用於分佈式系統,如微服務架構。然而,這也代表伺服器無法隨意撤銷 JWT,因此若有撤銷需求,需額外設計相應機制。
使用情境
- 身份驗證:JWT 最常見的用途之一是用於用戶登錄後的身份驗證。
- API 認證:JWT 可以用來保護 Web API,確保只有經過身份驗證的用戶才能訪問。
- 單點登錄(SSO):JWT 支援在多個應用程式間進行身份共享,實現單點登錄功能。