跳到主要內容
楓葉工具箱 ToolMaple

JWT Decode 解碼

貼上 JSON Web Token 立即解碼 header 與 payload,過期時間(exp)轉成人類可讀格式,附發行者識別與簽名驗證提示。Auth0、Firebase、Supabase 的 token 都能拆,解析在瀏覽器內完成,token 不會上傳。

格式正確、無 exp
payload 沒有 exp 欄位、無法判斷有效期

時間欄位

  • iat(簽發時間)
    1516239022
    1/18/2018, 1:30:22 AM

Header

{
  "alg": "HS256",
  "typ": "JWT"
}

Payload

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

Signature(base64url)

SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

本工具只解碼、不做簽名驗證(需要密鑰或公鑰)。

什麼是 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 timestamp
  • iat(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 來除錯,資訊結構相同。

相關工具