JWT 解碼器
免費 JWT 解碼與 Token 解析:貼上即拆出 Header、Payload、Signature,換算 exp 時間、標示是否過期,也能用密鑰或公鑰驗證簽章。只在瀏覽器處理。
貼上 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)
↑ SignatureHeader 與 Payload 只是編碼、不是加密:任何拿到 Token 的人都能解開來看,所以 Payload 裡不應該放密碼、身分證字號這類資料。能不能被竄改,靠的是第三段簽章——內容改了一個字,簽章就對不上。
標準欄位怎麼看
| 欄位 | 意思 | 本工具怎麼顯示 |
|---|---|---|
| iss | 簽發者,例如登入服務的網址 | 原樣顯示(標準欄位旁都會加中文名稱) |
| sub | 主體,通常是使用者編號 | 原樣顯示 |
| aud | 給誰用,例如某個 API | 原樣顯示 |
| exp | 過期時間(秒級時間戳) | 換算成你電腦時區的日期與 UTC,另外標出「還有多久到期」或「已過期多久」 |
| nbf | 在這個時間之前不生效 | 換算成日期;還沒到會標「尚未生效」 |
| iat | 簽發時間 | 換算成日期 |
| jti | 這個 Token 的唯一編號,用來防止重複使用 | 原樣顯示 |
過期狀態只看時間欄位,不代表簽章正確;要確認 Token 沒被竄改,請用驗證簽章。
驗證簽章要準備什麼
| Header 的 alg | 簽章方式 | 驗證時要輸入 |
|---|---|---|
| HS256/HS384/HS512 | 雙方共用同一把密鑰(HMAC) | 那把密鑰;若系統存的是 Base64,勾「密鑰是 Base64 編碼的」 |
| RS256/RS384/RS512 | RSA 私鑰簽、公鑰驗 | PEM 公鑰(BEGIN PUBLIC KEY),或 JWK/JWKS |
| PS256/PS384/PS512 | RSA-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 解碼器?
- 貼上 JWT Token(前面帶 Bearer 也可以),或按「範例 Token」
- 點擊「解碼」按鈕
- 查看 Header、Payload 和 Signature,以及過期狀態
- 需要確認簽章時,在「驗證簽章」輸入密鑰或貼上公鑰
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 換新的。