首頁 › 程式開發 › JWT 解析工具
🔧

JWT 解析工具

線上解析 JWT 標頭與酬載,逐條解釋宣告並在本機驗證簽章

JWT 令牌

令牌只在本机浏览器解码,不会发送到任何服务器。粘贴时多余的空格、引号与 Bearer  前缀会自动去除。

Header 头部
—
—
Payload 载荷
—
—
声明逐条解读
声明值含义与本工具的处理

值列保持令牌中的原始类型:字符串带引号、数字与布尔值不带。自定义声明无法逐一预置含义,会标注为业务方自定义字段。

时间戳换算
声明本地时间相对当前

签名验证

验签在浏览器内用 WebCrypto 完成,密钥不会离开本机。签名验证只证明「内容未被篡改」,令牌能不能用还要看有效期、签发者、受众与业务权限。

工具介紹

除錯 JWT 最常見的需求只有兩個:看清裡面到底裝了什麼,以及確認它有沒有被改過。這個工具把兩件事都放在本機瀏覽器裡完成,令牌不必交給任何第三方服務。

  • 三段拆解:標頭、酬載、簽章分別顯示解碼後的位元組數與字元數,結構一眼看清
  • UTF-8 正確還原:中文姓名、帶重音的字元按位元組解碼後還原,不會出現亂碼
  • 宣告逐條解釋:註冊宣告、OIDC 常用宣告與標頭參數都給出含義,自訂欄位標註為業務約定
  • 有效期限換算:exp、nbf、iat、auth_time 同時顯示本機時間、UTC ISO 與倒數,並隨秒刷新
  • 本機驗簽:支援 HS256/384/512、RS256/384/512、PS256/384/512、ES256/384/512,金鑰與公鑰透過 WebCrypto 在本機運算
  • 公鑰格式寬容:PEM 公鑰與單一 JWK 都能匯入,憑證與錯誤格式會說明原因而不是直接失敗
  • 異常輸入容錯:自動去掉 Bearer 前綴、前後引號、換行與結尾逗號;兩段令牌、空簽章、alg:none、酬載不是 JSON、5 段 JWE 都有對應的明確提示
  • 敏感欄位提醒:酬載裡出現密碼、手機號碼、證件號等鍵名時,提示改用 ID 到伺服器查詢
  • 範例令牌:有效、已過期、可驗簽的 RS256、alg=none、非 JSON 酬載五種一鍵載入

使用情境

  • 介面回傳 401 時先確認令牌是否已經過期或受眾填錯
  • 前端登入後檢查 id_token 裡的角色、權限範圍是否按預期簽發
  • 對接第三方登入時核對 iss、aud、kid 與 JWKS 公鑰是否匹配
  • 安全自查:alg:none 或不驗簽的伺服器設定風險
  • 教學示範:解釋為什麼 JWT 只防竄改而不防偷看

常見宣告速查

宣告位置必須校驗嗎
alg標頭要。伺服器應固定接受白名單,而不是依令牌自報的演算法驗簽,這正是演算法混淆攻擊的入口
kid標頭用它選金鑰,但要確認金鑰來源是自己的 JWKS,而不是 jku 裡給的位址
exp / nbf酬載要,並保留 30 至 60 秒的時鐘偏移容忍
iss酬載要精確比對,多環境共用金鑰時最容易漏
aud酬載要。不校驗受眾會讓給 A 服務的令牌直接存取 B 服務
jti酬載需要撤銷或防重放時才有意義,只靠有效期限做失效通常不夠

常見問題

  • 解碼成功說明令牌有效嗎?不說明。解碼只是 Base64URL 還原,任何人不需要金鑰都能做。有效性必須由伺服器驗證簽章並檢查有效期限、簽發者與受眾
  • 為什麼酬載能被明文看到?JWT 只簽章不加密。要放敏感內容請改用 JWE(本工具辨識到 5 段結構時會說明需要私鑰解密),或者只在酬載裡放 ID
  • alg=none 是漏洞嗎?標準裡沒有合法的 none 驗簽流程。風險在於老舊函式庫會「依令牌宣告的演算法」驗簽,於是攻擊者把簽章去掉並改 alg 就能偽造身分
  • HS256 和 RS256 該用哪個?單一服務自己簽發自己驗證時 HMAC 更省事;需要把公鑰分發給多個驗證方(微服務、開放平台)時用 RS256 或 ES256,避免共用金鑰外洩
  • 驗簽提示需要安全上下文?WebCrypto 只在 https 或 localhost 下可用,透過一般 http 的區域網路位址存取時只能解碼,不能驗簽
  • 為什麼 exp 顯示時間和文件裡差 8 小時?令牌裡的時間戳是 UTC 秒數,本工具依你本機時區換算,中國時區會顯示為 UTC+8

想單獨還原某一段 Base64URL 內容請用 Base64 編解碼;把 exp 之類的秒數換算成可讀日期可用時間戳轉換;解碼後的 JSON 需要進一步整理與查重複請使用 JSON 格式化。令牌與金鑰全部留在本機瀏覽器處理,不會上傳,也不會寫入日誌。