JWT 的結構與 Base64URL 編碼
JSON Web Token(JWT)是一種開放標準(RFC 7519),用於在網路應用程式環境間安全地傳遞聲明。一個標準的 JWT 字串是由三個部分組成,彼此之間以點號(.)進行分隔。這三個部分依序為:
- Header(標頭):含有關於 Token 類型及所使用加密演算法的資訊。
- Payload(負載):包含聲明(Claims),即傳遞的實體資訊與相關元數據。
- Signature(簽章):用於驗證傳送者身分並確保訊息在傳輸過程中未被篡改。
這三個部分在傳輸時,皆是使用 Base64URL 編碼格式進行處理。Base64URL 是 Base64 的變體,它將標準 Base64 中的 + 替換為 -,將 / 替換為 _,並省略末尾的等號(=)填補字元,以確保 Token 能夠安全地放置於 URL 參數中傳遞。
Header 與 Payload 的常見聲明
在解碼後的 JSON 格式中,Header 與 Payload 各司其職,包含多個標準化與自訂的欄位。
Header 欄位
Header 主要用於描述 Token 的基本元數據,常見的欄位包括:
alg(演算法):指定用於產生簽章的演算法,例如 HS256、RS256 等。typ(類型):指定媒體類型,在 JWT 中通常固定為JWT。
Payload 欄位
Payload 包含實際要傳輸的聲明數據,這些聲明分為標準註冊聲明、公共聲明和私有聲明。常見的標準聲明包括:
iat(Issued At):Token 的簽發時間,以 Unix 時間戳記表示。exp(Expiration Time):Token 的失效時間,同樣以 Unix 時間戳記表示,超過此時間的 Token 應被視為無效。nbf(Not Before):Token 開始生效的時間,在此時間之前該 Token 不可使用。sub(Subject):Token 所代表的主體,通常是使用者的唯一識別碼。
解碼與驗證簽章的差異
使用本工具解析 JWT 時,必須理解「解碼(Decoding)」與「驗證(Verification)」是完全不同的程序。
- 解碼:僅是將 Base64URL 編碼的字串還原為可讀的 JSON 格式。由於 JWT 的 Header 和 Payload 並未加密,任何人只要取得 Token,都可以直接將其解碼並讀取其中的內容。
- 驗證:需要使用簽發方的簽章演算法、私鑰或共享金鑰,重新計算簽章並與 Token 中的第三部分進行比對,以確認 Token 是否遭到篡改。
本工具僅提供解碼功能,不會要求輸入任何簽發秘密金鑰或公鑰,因此無法驗證簽章的真實性。在實際生產環境中,後端系統必須執行完整的簽章驗證,絕不能僅依賴解碼後的 Payload 數據,否則將面臨偽造 Token 的嚴重安全性風險。
工具運作規則與錯誤處理
本工具在解析輸入的 JWT 時,會依據特定規則進行即時檢查,並在不符合規範時隱藏解碼區域,顯示對應的錯誤提示:
- 輸入狀態:若輸入框為空,工具保持在「貼上 JWT 即可開始解析。」狀態。當按下清空按鈕時,工具會顯示「已清空。」並將焦點自動移回輸入框。
- 格式檢查:輸入必須為三段由點號分隔的內容,否則顯示「不是合法的 JWT——應由三段用點號分隔的內容組成。」。若輸入長度過長,則顯示「內容長度超出正常 JWT 範圍。」。
- 解碼檢查:若 Header 的 Base64URL 格式不正確,顯示「Header 解碼失敗——Base64URL 格式不正確。」;若 Payload 的 Base64URL 格式不正確,則顯示「Payload 解碼失敗——Base64URL 格式不正確。」。
- JSON 格式檢查:解碼後的內容必須為合法的 JSON 格式,否則分別顯示「Header 不是合法的 JSON。」或「Payload 不是合法的 JSON。」。
- 解析成功:成功解析時顯示「解析成功。」,並呈現解碼後的 JSON 內容與相關統計資訊,包括字元數量。
本工具會提取並顯示以下欄位資訊:
- 演算法
- 類型
- 簽發時間
- 過期時間
- 狀態:依據
exp聲明判定,顯示為「有效」、「已過期」、「尚未生效」或「無過期時間」。
隱私與瀏覽器本地處理
本工具的解析與解碼程序完全在你的瀏覽器本地端執行。輸入的 Token 字串不會上傳到 BroBroGo 伺服器,所有的 Base64URL 解碼與 JSON 解析運算皆在用戶端裝置上完成,確保敏感的 Token 數據不會在網路傳輸中外洩。
常見問題
把 JWT 貼到這裡安全嗎?
安全。解析完全在你的瀏覽器裡進行,Token 不會被傳送到 BroBroGo。
這個工具會驗證簽章嗎?
不會。它只負責把 Header 和 Payload 解出來給你看,驗證簽章需要簽發方的金鑰,這個工具不需要也不會要求你提供。這僅檢查 exp 聲明 — 它不會驗證簽章、發行者或接收者。
怎麼知道我的 Token 是否已經過期?
解碼結果旁會顯示狀態標籤——有效、已過期、尚未生效或無過期時間,依據的是 Token 裡的 exp 欄位。