JWT 解碼器

免費 JWT 解碼與 Token 解析:貼上即拆出 Header、Payload、Signature,換算 exp 時間、標示是否過期,也能用密鑰或公鑰驗證簽章。只在瀏覽器處理。

立即使用JWT 解碼器(免費、免註冊)

貼上 JWT(前面帶 Bearer 也行)按「解碼」,立刻拆出 Header、Payload、Signature,換算 exp/iat/nbf 時間並標出還有多久到期;有密鑰或公鑰的話,還能在同一頁驗證簽章。解碼與驗證都在瀏覽器裡計算,Token 與金鑰不會送出。

JWT 的三段各是什麼

JWT 是用「.」接起來的三段 Base64URL 字串:第一段 Header 寫簽章演算法,第二段 Payload 放使用者編號、權限、到期時間這類資料(稱為聲明),第三段 Signature 是用金鑰對前兩段算出來的簽章。

三段的樣子(實際是接成一整行)

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
  ↑ Header:{"alg":"HS256","typ":"JWT"}
.eyJzdWIiOiIxMjM0NTY3ODkwIn0
  ↑ Payload:{"sub":"1234567890"}
.(簽章,Base64URL)
  ↑ Signature

Header 與 Payload 只是編碼、不是加密:任何拿到 Token 的人都能解開來看,所以 Payload 裡不應該放密碼、身分證字號這類資料。能不能被竄改,靠的是第三段簽章——內容改了一個字,簽章就對不上。

標準欄位怎麼看

Payload 常見的標準欄位
欄位意思本工具怎麼顯示
iss簽發者,例如登入服務的網址原樣顯示(標準欄位旁都會加中文名稱)
sub主體,通常是使用者編號原樣顯示
aud給誰用,例如某個 API原樣顯示
exp過期時間(秒級時間戳)換算成你電腦時區的日期與 UTC,另外標出「還有多久到期」或「已過期多久」
nbf在這個時間之前不生效換算成日期;還沒到會標「尚未生效」
iat簽發時間換算成日期
jti這個 Token 的唯一編號,用來防止重複使用原樣顯示

過期狀態只看時間欄位,不代表簽章正確;要確認 Token 沒被竄改,請用驗證簽章。

驗證簽章要準備什麼

演算法與需要的金鑰
Header 的 alg簽章方式驗證時要輸入
HS256/HS384/HS512雙方共用同一把密鑰(HMAC)那把密鑰;若系統存的是 Base64,勾「密鑰是 Base64 編碼的」
RS256/RS384/RS512RSA 私鑰簽、公鑰驗PEM 公鑰(BEGIN PUBLIC KEY),或 JWK/JWKS
PS256/PS384/PS512RSA-PSS同上
ES256/ES384/ES512橢圓曲線(P-256/P-384/P-521)PEM 公鑰,或 JWK/JWKS

目前支援 12 種:HS256、HS384、HS512、RS256、RS384、RS512、PS256、PS384、PS512、ES256、ES384、ES512。EdDSA 與 X.509 憑證格式暫不支援。

  • JWKS 有很多把金鑰:會照 Token Header 裡的 kid 挑對應那把;Header 沒寫 kid 又有多把時,請只貼要用的那一把。
  • 貼到 BEGIN RSA PUBLIC KEY:那是 PKCS#1 格式,瀏覽器不收;請改用 BEGIN PUBLIC KEY 開頭的公鑰或 JWK。
  • 貼到私鑰:驗證只需要公鑰,工具會直接提醒;私鑰不要貼到任何網頁。
  • alg 是 none:代表沒有簽章,任何人都能改內容再送出,系統不應該接受這種 Token。

解碼失敗常見的原因

  • 段數不對:JWT 一定是三段;複製時少了一截或多了換行最常見。五段的是加密過的 JWE,要有金鑰才能解開,無法直接解碼。
  • 不是有效的 Base64URL:中間混進空白以外的符號,或頭尾被截斷;從 JSON 或程式碼複製時常把前後的雙引號一起帶進來,去掉引號再解碼即可。
  • Payload 不是 JSON:有些系統的 Token 不是 JWT 格式(例如隨機字串的 Session ID),本來就解不開。

Payload 裡超過 JavaScript 安全範圍的大整數(常見於使用者編號)會照原本的位數顯示,不會被四捨五入改掉最後幾位。

JWT 解碼器功能特點

  • Header 解碼
  • Payload 解碼(UTF-8,中文正確顯示)
  • 驗證簽章:HS256/384/512 輸入密鑰,RS、PS、ES 系列貼 PEM 公鑰或 JWK/JWKS
  • 過期時間檢查,顯示還有多久到期或已過期多久,nbf 未到也會標示
  • 標準聲明解釋
  • 時間戳轉換(本地時間與 UTC)
  • 範例 Token 一鍵試用
  • 一鍵複製
  • 只在瀏覽器解碼與驗證,Token 與金鑰不送伺服器

如何使用JWT 解碼器?

  1. 貼上 JWT Token(前面帶 Bearer 也可以),或按「範例 Token」
  2. 點擊「解碼」按鈕
  3. 查看 Header、Payload 和 Signature,以及過期狀態
  4. 需要確認簽章時,在「驗證簽章」輸入密鑰或貼上公鑰

JWT 解碼器常見問題

把 JWT 貼上來解碼安全嗎?

本工具完全在瀏覽器中解碼,不會把 Token 傳送到任何伺服器。但要注意 JWT 的 Header 和 Payload 只是 Base64 編碼,任何拿到 Token 的人都能解開,所以不應在裡面存放密碼等敏感資訊;正式環境的 Token 也別貼到不信任的網站。

這個工具能驗證 JWT 簽名嗎?

可以。解碼後在「驗證簽章」輸入金鑰:HS256/HS384/HS512 輸入共用密鑰;RS、PS、ES 系列貼上 PEM 公鑰或 JWK/JWKS。計算用瀏覽器內建的 Web Crypto,金鑰不會送出;EdDSA 與 X.509 憑證目前不支援。

什麼是 JWT?

JWT(JSON Web Token)是一種開放標準的令牌格式,由三部分組成:Header(標頭)、Payload(載荷)和 Signature(簽名)。常用於 API 身份驗證和資訊交換。

exp、iat、nbf 這些時間怎麼看?

它們是 JWT 的時間欄位,單位是秒級 Unix 時間戳:exp 是過期時間、iat 是簽發時間、nbf 是生效時間。本工具會自動換算成日期並標示是否已過期;要單獨換算時間戳,可以用站上的時間戳轉換工具。

HS256 和 RS256 差在哪?

HS256 是簽發和驗證用同一把密鑰,拿得到密鑰的服務都能簽出新 Token,適合只有自家後端在用的情況;RS256 是私鑰簽、公鑰驗,公鑰可以公開給其他服務驗證,但只有持有私鑰的一方能簽發。

驗證簽章顯示「簽章不符」可能是什麼原因?

最常見是金鑰不對(測試與正式環境用了不同密鑰、密鑰其實是 Base64 卻沒勾選、前後多了空白),其次是 Token 內容被改過或複製不完整。簽章對不上時,不要信任這個 Token 的內容。

怎麼從瀏覽器找到網站用的 JWT?

在自己的網站按 F12 打開開發者工具:看「Network(網路)」分頁裡 API 請求的 Authorization 標頭(Bearer 後面那串),或「Application(應用程式)」分頁裡的 Local Storage 與 Cookies。只解自己帳號的 Token,別貼別人的。

Token 過期了還能解碼嗎?

可以。解碼不看時間,過期的 Token 一樣能看到內容,工具會標示「已過期」與過期多久;只是伺服器不會再接受它,需要重新登入或用 Refresh Token 換新的。