JWT 的结构与 Base64URL 编码
JSON Web Token(JWT)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传递声明。一个标准的 JWT 由三个部分组成,各部分之间用英文点号(.)分隔。这三个部分依次为:
- Header(头部):包含令牌的元数据,例如所使用的签名算法和令牌类型。
- Payload(负载):包含实际需要传递的声明(Claims),如用户身份信息、签发时间和过期时间。
- Signature(签名):用于验证消息在传递过程中是否被篡改。
这三个部分在传输时均使用 Base64URL 编码。Base64URL 是对标准 Base64 的一种变体,它将字符 + 和 / 分别替换为 - 和 _,并省略了末尾的等号(=)填充,以便于在 URL 中安全传输。
Header 与 Payload 的常见声明
Header 通常是一个 JSON 对象,其中最常见的字段包括 alg(Algorithm,算法,例如 HS256 或 RS256)和 typ(Type,令牌类型,通常为 JWT)。
Payload 同样是一个 JSON 对象,包含具体的声明。标准定义了一些建议使用的公共声明:
iat(Issued At):令牌的签发时间,采用 Unix 时间戳格式。exp(Expiration Time):令牌的过期时间,同样是 Unix 时间戳,用于标识该令牌在此时间之后失效。
解码与验证的区别
使用本工具对 JWT 进行解码与对 JWT 进行验证(Verification)是完全不同的操作。
- 解码(Decoding):仅仅是将 Base64URL 编码的字符串还原为可读的 JSON 文本。由于 JWT 的 Header 和 Payload 并没有加密,任何人都可以通过解码直接读取其中的内容。
- 验证(Verification):是指利用签名算法以及对应的密钥(对称加密的共享密钥或非对称加密的公钥),对签名部分进行数学计算,以确认该 Token 是否由可信的签发方生成,且内容未被篡改。
本工具仅提供解码功能,不验证签名,也不需要用户输入任何签名密钥或公钥。在实际生产环境中,直接信任未经签名验证的 JWT 会带来严重的安全隐患,因为攻击者可以轻易修改 Payload 中的用户 ID 等敏感信息并重新编码。
错误处理与输入规则
在解析过程中,工具会严格校验输入内容的格式与规范:
- 如果输入框为空,工具保持在“粘贴 JWT 即可开始解析。”状态。
- 若输入的字符串不包含两个点号,工具会提示“不是合法的 JWT——应由三段用点号分隔的内容组成。”。
- 若 Header 部分的 Base64URL 格式不正确,显示“Header 解码失败——Base64URL 格式不正确。”。
- 若 Payload 部分的 Base64URL 格式不正确,显示“Payload 解码失败——Base64URL 格式不正确。”。
- 若解码后的 Header 无法解析为 JSON,显示“Header 不是合法的 JSON。”。
- 若解码后的 Payload 无法解析为 JSON,显示“Payload 不是合法的 JSON。”。
- 若输入文本过长,超出正常范围,显示“内容长度超出正常 JWT 范围。”。
- 一旦检测到无效 Token,解码区域将自动隐藏。当点击清空按钮后,输入焦点会自动返回到输入框。
浏览器本地处理与隐私
本工具在处理您的数据时具有明确的隐私保护机制。所有的解码操作完全在您的浏览器本地进行,没有任何数据会被上传到 BroBroGo 服务器。这意味着您的 Token 内容(包括其中可能包含的敏感用户数据)不会离开您的本地设备。
常见问题
把 JWT 粘贴到这里安全吗?
安全。解析完全在你的浏览器里进行,Token 不会被发送到 BroBroGo。
这个工具会校验签名吗?
不会。它只负责把 Header 和 Payload 解出来给你看,校验签名需要签发方的密钥,这个工具不需要也不会要求你提供。
怎么知道我的 Token 是否已经过期?
解码结果旁会显示状态标签——有效、已过期、尚未生效或无过期时间,依据的是 Token 里的 exp 字段。