繁體中文

開發者工具 · JWT 解碼器

Base64 與 Base64url:為什麼 JWT 在標準 Base64 解碼器中失敗

· 工作原理

jwt base64 編碼

兩個編碼字母會聚在解碼的 JWT 位元組上
原始 ToolAcre 向量圖

將 JWT 段貼到普通的 Base64 解碼器中,它可能會抱怨字元或填充。這篇文章解釋了 base64url 變體 JWS 的要求以及如何在兩者之間進行轉換。

無效字元、不正確的填充-當base64遇到base64url時出現的錯誤

「無效字元」或「不正確的填充」訊息通常表示 JWT 段被提供給需要普通 Base64 的解碼器。令牌可以被正確複製。它的表示遵循 base64url 約定,而接收實用程式接受相關但不同的字母表或堅持明確填充。

ToolAcre 避免了標頭和有效負載的不符。它的位元組解碼器會刪除空格,轉換 URL 安全符號,在長度允許時恢復省略的填充,然後將位元組轉換為嚴格的 UTF-8。任何階段的失敗都會成為 INVALID_JWT 錯誤,而不是原始瀏覽器異常。

兩個字母表 — 加號和斜杠與連字符和底線,以及為什麼 URL 強制進行更改

標準 Base64 使用加號和斜線作為其最後兩個字母位置。 Base64url 將連字號和底線分配給這些相同的位置。底層六位元值不會改變,因此將 `-` 轉換為 `+` 並將 `_` 轉換為 `/` 會保留每個解碼的位元組;僅傳輸安全的拼字變更。

這些替換在加號或斜槓已經具有語法的通道中很重要。 URL 安全拼字可減少表單或路徑處理造成的意外解釋。它不會增加保密、完整性或真實性。任何接收到資料段的人都可以反轉替換並恢復相同的字節,而無需加密金鑰。

填充 — 為什麼 JWS 會去除等號以及如何為嚴格解碼器恢復它們

ToolAcre 接受省略的填充。字母標準化後,它檢查段長度模四。餘二需要兩個等號,餘三需要一個等號。對於完整的 Base64 值來說,餘數為 1 是不可能的,因此會被視為截斷的字串而被拒絕,而不是猜測為形狀。

填充恢復是機械框架,而不是令牌修復。添加等號無法恢復複製期間丟失的字符,並成功的字節解碼並不表明這些字節來自發行者。此實作僅在呼叫 `atob` 之前重建瀏覽器解碼器所需的規格長度。

立即解碼整個令牌 - 不先在點上分割的錯誤

在解碼任何段之前,必須將緊湊簽名令牌按點分割。將 `header.payload.signature` 傳遞給 Base64 函數會引入屬於 JWT 序列化的點,而不是屬於 Base64 字母。 ToolAcre 需要這個 JWS 形狀的輸入正好三個段,並在該結構不存在時報告觀察到的計數。

由五個部分組成的案例收到單獨的 JWE 訊息,因為加密的緊湊序列化不是同一個物件。相反,兩個或四個部分錶示截斷或錯誤的輸入。此結構檢查在 JSON 解釋之前進行,使複製錯誤與格式錯誤的編碼文字或格式錯誤的 JSON 區分開來。

工作範例 — 將一個段落從 base64url 轉換為 base64,填入它並將其解碼為 JSON

對於有效的轉換,請使用 `eyJhbGciOiJIUzI1NiJ9`。它不包含變體之間不同的字母字符,但其缺失的填充仍然說明了管道。它的長度允許填充恢復;解碼為 `{"alg":"HS256"}` 產生 UTF-8 字節,JSON 解析產生一個具有一個 `alg` 屬性的物件。

包含連字符或底線的段遵循相同的順序,首先替換兩個符號。 ToolAcre 在 `base64ToBytes` 內執行這些操作,然後 `decodeSegment` 解析結果文字。顯示的演演算法是未經驗證的標頭宣告的演演算法;未選擇它作為驗證策略。

宣告中的 Unicode — 為什麼解碼後的位元組必須讀取為 UTF-8 才能正確顯示名稱

宣告可能包含重音符號、CJK 字元或表情符號。 Base64 對位元組進行操作,因此將每個解碼的位元組視為獨立字元會破壞多位元組文字。正確的路徑是將符號編碼為位元組,然後是 UTF-8 解碼器。 ToolAcre 使用致命模式建構 `TextDecoder` ,因此無效的 UTF-8 會失敗。

測試覆蓋包含 `Zoë 世界 🙂` 的有效負載,並期望解碼後得到準確的字串。此結果證明位元組到文字管道保留了該測試值。它仍然沒有說明有效負載指定的人是否存在、發行者是否批准了宣告或令牌是否已更改。

這不包括什麼 - 簽名段,它解碼為字節而不是文字,並需要一個密鑰來表示任何內容

簽章區段位於 JSON 路徑之外。 ToolAcre 保留其原始編碼形式並僅嘗試測量解碼的位元組長度。無效簽章 Base64 會產生警告,但不會阻止標頭和有效負載檢查;空的第三段會產生不同的警告,表示不存在簽名字節。

這兩個結果都不是驗證結果。有意義的簽章驗證需要可信任的金鑰材料、獨立於攻擊者控制的輸入而選擇的允許演演算法以及應用程式檢查。位元組計數在診斷形狀時很有用,但零或三十二個測量位元組無法授權請求或建立發行者。

重點:使用支援 base64url 的解碼器 — ToolAcre JWT 解碼器處理標頭和有效負載的字母和填充

當目前作業正在檢查 JSON 時,使用能夠理解 base64url 的解碼器。 ToolAcre 處理前兩段的字母、省略填充、嚴格 UTF-8 和僅物件 JSON。它還拒絕不可能的長度,並將解析失敗包裝在訊息中,以識別標頭或有效負載是否失敗。

在該邊界處停止。乾淨的解碼意味著字串具有可恢復的位元組和適當的 JSON 物件。這並不意味著其宣告是值得信賴的、經過驗證的、授權的或未經修改的。只有單獨配置的驗證器才能回答這些問題,且該瀏覽器工具故意不公開任何驗證操作。