无需登录 数据私有 本地保存

JWT手动解码器 - 无须库解析Header与Payload

11
0
0
0
常见问题

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它是一个紧凑的、URL安全的令牌格式,由三部分组成:Header(头部)、Payload(载荷)和Signature(签名),三部分用点号(.)分隔。JWT 通常用于身份认证和信息交换场景,因其自包含性和无状态特性而被广泛应用于现代Web应用中。

  • Header(头部):包含令牌类型(typ,通常为"JWT")和签名算法(alg,如HS256、RS256等)。
  • Payload(载荷):包含声明(Claims),如用户ID(sub)、签发时间(iat)、过期时间(exp)等。这部分是Base64URL编码的JSON。
  • Signature(签名):用于验证令牌的完整性和真实性。它通过将Header和Payload的Base64URL编码用点号连接后,使用指定的算法和密钥进行签名生成。

JWT的Header和Payload使用Base64URL编码,可以直接解码。步骤如下:
1. 将JWT按点号(.)分割成三部分;
2. 取第一部分(Header)和第二部分(Payload);
3. 将Base64URL转换为标准Base64(将-替换为+_替换为/,并补全=填充);
4. 使用Base64解码器解码,得到JSON字符串;
5. 解析JSON即可获得内容。
注意:解码Payload可以查看内容,但这并不意味着可以修改它——除非你拥有签名密钥来重新生成有效的签名。

Base64URL是Base64的一种变体,专门为URL和文件名安全而设计。主要区别:
+ 替换为 -
/ 替换为 _
• 移除末尾的 = 填充字符
这使得Base64URL编码的字符串可以直接用于URL参数、HTTP头等场景,无需额外的URL编码。

这些是JWT标准中定义的时间相关声明,使用Unix时间戳(秒)表示:
exp(Expiration Time):过期时间,超过此时间令牌无效;
iat(Issued At):签发时间,表示令牌是何时创建的;
nbf(Not Before):生效时间,在此时间之前令牌无效;
auth_time:用户认证时间(常见于OpenID Connect)。
本工具会自动识别这些时间戳字段并将其转换为可读的日期时间格式。

不能。验证JWT签名需要密钥(对称加密的共享密钥或非对称加密的公钥)。本工具是一个纯浏览器端的手动解码器,不依赖任何后端服务或加密库,因此只能解码和查看Header与Payload的内容。签名部分仅显示其原始Base64URL字符串和十六进制表示。如需验证签名,请使用支持密钥输入的JWT调试工具(如jwt.io的在线调试器)或后端JWT库。

JWT的Payload只是Base64URL编码的JSON,任何人都可以解码和修改它。但关键在于签名验证:服务端在收到JWT后,会用密钥重新计算签名并与令牌中的签名比对。如果Payload被修改而签名未更新,验证将失败,服务端会拒绝该令牌。因此,Payload可以被修改,但修改后的令牌无法通过签名验证(除非攻击者拥有签名密钥)。

JWT广泛应用于:
身份认证:用户登录后,服务端生成JWT返回给客户端,后续请求携带JWT进行身份验证(通常放在Authorization头的Bearer Token中);
信息交换:在微服务之间安全传递用户信息或上下文数据;
单点登录(SSO):在多个应用间共享认证状态;
API网关:在API网关层进行令牌验证和路由;
OAuth 2.0 / OpenID Connect:作为access token或ID token使用。