JWT 的結構與組成部分
JSON Web Token (JWT) 是一種開放標準 (RFC 7519),用於在網絡應用環境間安全地傳遞聲明。一個標準的 JWT 由三個部分組成,各部分之間以英文點號(.)分隔。這三個部分依序為:
- Header(標頭):包含 Token 的元數據,例如所使用的加密演算法和 Token 的類型。
- Payload(負載):包含實際傳輸的聲明(Claims),例如用戶資訊、簽發時間及過期時間。
- Signature(簽章):用於驗證 Token 在傳輸過程中未被篡改。
本工具在收到輸入時,會驗證其是否符合這三段式結構。若輸入不符合此格式,系統會顯示「不是合法的 JWT——應由三段用點號分隔的內容組成」。若輸入的長度過長,則會顯示「內容長度超出正常 JWT 範圍」並隱藏解碼區域。
Header 與 Payload 的解碼原理
JWT 的 Header 和 Payload 是使用 Base64URL 編碼進行序列化的,這是一種適合在網址中傳輸的編碼方式。
- Header:通常包含
alg(演算法,例如 HS256 或 RS256)和typ(類型,通常為 JWT)等聲明。 - Payload:包含具體的業務數據與標準聲明,例如
iat(簽發時間)和exp(過期時間)。
本工具會將這兩部分從 Base64URL 還原為原始的 JSON 格式。在解碼過程中,如果遇到非標準的編碼或格式錯誤,工具會觸發相應的錯誤提示:
- 若 Header 的 Base64URL 格式不正確,會顯示「Header 解碼失敗——Base64URL 格式不正確」。
- 若 Payload 的 Base64URL 格式不正確,會顯示「Payload 解碼失敗——Base64URL 格式不正確」。
- 若解碼後的內容無法解析為 JSON 物件,則會分別提示「Header 不是合法的 JSON」或「Payload 不是合法的 JSON」。
時間聲明與狀態判定
JWT 內部使用 Unix 時間戳(自 1970 年 1 月 1 日 00:00:00 UTC 起算秒數)來記錄時間資訊。工具會提取並轉換以下兩個關鍵時間聲明:
- 簽發時間 (
iat):對應工具輸出的「簽發時間」。 - 過期時間 (
exp):對應工具輸出的「過期時間」。
工具會根據當前時間與 Token 內的 exp 聲明進行比對,並在界面上即時顯示對應的狀態標籤:
- 有效:當前時間未超出過期時間。
- 已過期:當前時間已超出過期時間。
- 尚未生效:當前時間早於 Token 的生效時間。
- 無過期時間:若 Token 內不含
exp聲明,則狀態會顯示為「無過期時間」。
需要注意的是,此工具僅檢查 exp 聲明 — 它不會驗證簽名、簽發者或受眾。
解碼與驗證的本質區別
在使用 JWT 時,必須釐清「解碼(Decoding)」與「驗證(Verification)」的分別:
| 項目 | 解碼 (Decoding) | 驗證 (Verification) |
|---|---|---|
| 目的 | 將 Base64URL 字串還原為可讀的 JSON 格式。 | 確認 Token 的來源可信且內容未被篡改。 |
| 所需資訊 | 僅需 JWT 字串本身。 | 需要簽發方的私鑰、公鑰或對稱式密鑰(Signing Secret)。 |
| 安全性 | 任何人都可以解碼 JWT 並讀取其內容。 | 只有持有正確密鑰的系統才能完成驗證。 |
本工具僅提供解碼功能,不會要求你提供任何簽章密鑰或公開金鑰,因此無法驗證 Token 的真實性。在實際生產環境中,接收 JWT 的後端服務必須進行簽章驗證,否則客戶端可以任意修改 Payload 內容,帶來嚴重的安全漏洞。
本地處理與隱私說明
當你在「貼上你的 JWT」輸入框中輸入 Token 後,所有的解析與解碼程序均在你的瀏覽器本地執行。你的 Token 會在瀏覽器本地解碼,不會上傳到 BroBroGo。
當你點擊「清空」按鈕時,輸入框的內容會被清除,工具會顯示「已清空」,且焦點會自動返回到輸入框,方便你進行下一次解析。若輸入框為空,工具則保持在「貼上 JWT 即可開始解析。」的準備狀態。
常見問題
把 JWT 貼到這裡安全嗎?
安全。解析完全在你的瀏覽器內進行,Token 不會被傳送到 BroBroGo。
這個工具會驗證簽章嗎?
不會。它只負責把 Header 和 Payload 解出來給你看,驗證簽章需要簽發方的金鑰,這個工具不需要亦不會要求你提供。
怎麼知道我的 Token 是否已經過期?
解碼結果旁會顯示狀態標籤——有效、已過期、尚未生效或無過期時間,依據的是 Token 內的 exp 欄位。