简体中文

开发者工具 · 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 对象。这并不意味着其声明是值得信赖的、经过验证的、授权的或未经修改的。只有单独配置的验证器才能回答这些问题,并且该浏览器工具故意不公开任何验证操作。