什麼是 JWT?
JWT(JSON Web Token)是 2015 年 IETF RFC 7519 定義的「以 JSON 表示、用簽章保護完整性」的 token 格式。常用於現代網站登入流程:使用者登入後,server 產生一個 JWT 給瀏覽器,之後每次 request 帶上這個 token,server 就知道是誰,不必查資料庫。
JWT 屬於更大的 JOSE(JavaScript Object Signing and Encryption)標準家族,相關規範還有 JWS(簽章)、JWE(加密)、JWA(演算法)、JWK(金鑰格式)。OAuth 2.0 / OpenID Connect / Auth0 / Firebase Auth / Supabase 都用 JWT。
常見使用情境
- SPA / 行動 App 登入:server 產生 JWT,client 存 localStorage 或 cookie,後續 request 放
Authorization: Bearer ... - OAuth 2.0 / OIDC:Google / Facebook / Apple 登入 成功後拿到的
id_token就是 JWT - 跨服務驗證:micro-service 間互信,用共享密鑰簽 JWT 傳遞使用者身分
- Email 驗證 / 重設密碼連結:把過期時間放在 token 裡,不必在資料庫多存一個記錄
- API key 替代:第三方 API(Stripe webhook、Apple sign in)用 JWT 證明請求來源合法
JWT 結構
JSON Web Token 由 . 分隔的三段組成: Header.Payload.Signature。前兩段是 base64url 編碼的 JSON、第三段是簽名。 本工具只解前兩段內容,不做簽名驗證(需要私鑰或共享密鑰)。
常見 payload 欄位
iss(issuer):發行者sub(subject):主體(通常是 user id)aud(audience):接收方exp(expiration):過期時間 Unix timestampiat(issued at):發行時間nbf(not before):早於這時間視為無效jti(JWT ID):token 唯一識別碼
簽章演算法
- HS256 / HS384 / HS512(HMAC):用「共享密鑰」簽。簡單、適合 server 自簽自驗、不適合跨服務(雙方都拿到 key 就能偽造)
- RS256 / RS384 / RS512(RSA) :用私鑰簽、公鑰驗。適合「server 簽、其他人驗」的單向信任場景。OIDC 預設用 RS256
- ES256 / ES384 / ES512(ECDSA):橢圓曲線。比 RSA 短、效能好、新系統推薦
- none:不簽章。曾經是 JWT 規範漏洞之一(攻擊者把 alg 改成 none 就能繞過驗證),現代 library 預設禁用
JWT vs Session Cookie
- Session Cookie:server 存 session、cookie 只存 session id。優:可立即撤銷、payload 小;劣:要 sticky session 或共享 store
- JWT:所有資訊在 token 內、server stateless。優:易做水平擴展、跨服務;劣:難立即撤銷(要靠 blacklist 或縮短 exp),payload 較大
- 實務:純單體網站用 session cookie 通常更簡單;微服務 / SPA / 跨網域 / OAuth 場景用 JWT 更自然
安全提醒
- JWT 內容是 base64 編碼,不是加密,任何人都能解出 payload
- 不要在 payload 放敏感資訊(密碼、身分證、信用卡)
- 過期 token 即使「看起來合法」也該拒絕(server 必須驗 exp)
- 客戶端解碼只是預覽,server 端必須完整驗證簽名
常見問題
JWT 過期後該怎麼換新的?
常見做法是雙 token:短期 access token(15 分鐘到 1 小時)+ 長期 refresh token(數天到數週)。access token 過期時,用 refresh token 跟 server 換新的, 使用者不會被踢出。refresh token 必須安全儲存(HttpOnly cookie)。
能撤銷已發出的 JWT 嗎?
嚴格說不行——這是 JWT 設計的取捨。實務做法:(1)縮短 exp、強制 refresh;(2)server 端維護一份 blacklist;(3)使用者登出時改 user 的「token 版本號」, JWT 內含此版本號,版本對不上即失效。
JWT 該存 localStorage 還是 cookie?
HttpOnly cookie 較安全(防 XSS 偷 token),但要處理 CSRF。 localStorage 寫起來簡單,但只要網站有任何 XSS 漏洞就完蛋。SPA 普遍用 localStorage,安全敏感的應用建議改 HttpOnly cookie + CSRF token。
為什麼 JWT 看起來這麼長?
因為三段都是 Base64url 編碼,加上 payload 通常含 user id、權限、過期時間等多個欄位,再加簽章本身就要 256-bit 以上,總長度 200-500 字元很正常。Cookie 4KB 上限通常夠用,但要小心多個 JWT 同時存的情況。
貼正式環境的 token 安全嗎?
JWT 裡是帳號身分與權限資訊,外洩等於把登入狀態送人,所以這個問題該問。 本工具的「解碼」其實只是 Base64url 還原,一行 JavaScript 就能做的事,全程發生在你這個分頁,本站沒有任何後端 API 能收到它。要更保險,可以貼一個已過期的 token 來除錯,資訊結構相同。
相關工具
- Base64 編碼解碼
文字 ↔ Base64 雙向編碼解碼,完整支援 UTF-8 中文與特殊字元。
- JSON 格式化
JSON 美化與壓縮雙向轉換,支援 2 / 4 / Tab 縮排,語法錯誤即時標出行號。
- UUID 產生器
產生 UUID v4(隨機)與 UUID v7(含時間戳排序)通用唯一識別碼,支援批量產生與一鍵複製。
- 雜湊計算
計算文字與檔案的 SHA-1、SHA-256、SHA-384、SHA-512 雜湊值,走瀏覽器原…
- Unix 時間戳轉換
Unix epoch(時間戳)與日期時間雙向轉換,自動偵測秒與毫秒,當前時間戳即時顯示、一鍵複製。
- URL 編碼解碼
中文與特殊字元 ↔ URL 百分比編碼(percent-encoding)雙向轉換工具,支援 e…
