
什麼是 JWT (JSON Web Token)?
JWT (JSON Web Token) 是一個開放標準 (RFC 7519),用於在兩方之間以 JSON 物件的形式安全地傳輸資訊。由於其緊湊且自包含 (self-contained) 的結構,它被廣泛用於身份驗證和資訊交換。
JWT 的結構
JWT 由三個部分組成,並以點 (.) 分隔:
- Header (標頭):包含令牌的類型 (JWT) 和使用的簽名演算法 (如 HS256, RS256)。
- Payload (負載):包含聲明 (關於使用者或元數據的資訊,如過期時間)。
- Signature (簽名):通過對編碼後的標頭、負載進行簽名而創建,使用密鑰或公鑰以確保數據完整性。
常見應用場景
- 身份驗證 (Authentication):使用者登入後,後續請求會包含 JWT,允許使用者存取該令牌授權的路由和資源。
- 資訊交換:JWT 是傳輸數據的一種安全方式,因為它們可以被簽名和驗證。
安全最佳實踐
- 不要存儲敏感數據:負載僅經過 Base64Url 編碼,並未加密。任何人都可以解碼。
- 使用強大的演算法:在分散式系統中,建議優先使用 RS256 (非對稱) 而非 HS256 (對稱)。
- 設定短的過期時間:當令牌被竊取時,將風險窗口降至最低。
- 驗證簽名:在信任數據之前,務必始終在伺服器端驗證簽名。
JWT 調試
當 JWT 驗證失敗時,請檢查以下事項:
- 令牌是否過期 (
exp聲明)? - 簽名是否與提供的公鑰/密鑰匹配?
iss(發行者) 或aud(受眾) 聲明是否正確?
使用 JWT 調試工具可以幫助您輕鬆檢查內容並測試簽名。