JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它由三部分组成,通过点号(.)分隔:
- Header(头部):包含令牌的元数据,如签名算法(alg)和令牌类型(typ)
- Payload(负载):包含Claims(声明),是关于用户和令牌的元数据
- Signature(签名):用于验证令牌的完整性和真实性
完整格式为:xxxxx.yyyyy.zzzzz。在本工具中,粘贴JWT后会自动将三部分以不同颜色区分显示,让您一目了然地查看每个部分的内容。
HS256和RS256是两种不同的JWT签名算法,主要区别在于密钥使用方式:
- HS256(对称加密):签发方和验证方使用同一个密钥(Secret)。密钥必须保密,适用于同一服务内部或信任的系统间使用。
- RS256(非对称加密):签发方使用私钥签名,验证方使用公钥验证。私钥保密,公钥可以公开分发,适用于跨服务、第三方集成场景。
在调试时,HS256需要输入共享密钥,RS256需要输入RSA公钥。本工具支持两种算法的签名验证。
这三个是JWT中的标准时间Claim:
- exp(Expiration Time):过期时间,Token在此时间后应被拒绝使用
- nbf(Not Before):生效时间,Token在此之前应被拒绝使用
- iat(Issued At):签发时间,Token创建的时间点
本工具会自动将这些Unix时间戳转换为人类可读的日期时间格式,并高亮显示Token当前的有效期状态(有效/即将过期/已过期)。
Base64URL是Base64编码的URL安全变体,主要区别在于字符替换:
- 将
+替换为- - 将
/替换为_ - 移除末尾的
=填充符
JWT使用Base64URL编码是为了确保编码后的字符串可以在URL、Cookie等场景中安全传输,不会因为特殊字符引起解析错误。本工具会自动处理这种编码的解码工作。
JWT本身是安全的,但使用不当可能导致安全问题:
- 算法混淆攻击:攻击者将alg改为none或从RS256降级为HS256
- 密钥泄露:对称加密的密钥一旦泄露,任何人都能伪造Token
- 敏感信息泄露Payload是明文编码,不应存储密码等敏感数据
- Token过期处理:必须正确实现过期检查,拒绝使用过期Token
本工具会自动检测none算法并发出安全警告,帮助您识别潜在风险。
JWT过期后,需要重新认证获取新的Token。常见的解决方案是使用Refresh Token机制:
- 登录时同时签发Access Token(短期有效,如15分钟)和Refresh Token(长期有效,如7天)
- Access Token过期时,使用Refresh Token向认证服务器请求新的Access Token
- Refresh Token过期后,用户需要重新登录
本工具的exp字段会实时显示Token剩余有效时间,帮助您判断何时需要刷新Token。
签名验证失败常见原因:
- 密钥错误:输入的密钥与签发Token时使用的不一致(注意大小写和空格)
- 算法不匹配:Header中的alg与实际使用的算法不符
- Token被篡改:任何字符的修改都会导致签名失效
- 密钥格式错误:RSA/EC密钥需要完整的PEM格式
建议先使用快捷示例熟悉工具操作,再验证自己的Token。
本工具采用纯前端实现,所有操作都在您的浏览器本地完成:
- JWT解码、签名验证、有效期检查全部在浏览器JavaScript中执行
- Token数据不会被发送到任何外部服务器
- 页面关闭后,浏览器缓存的Token数据自动清除
您可以放心使用本工具处理包含敏感信息的生产环境Token,我们的设计原则是"数据永远不离开您的浏览器"。
判断JWT是否被篡改需要进行签名验证:
- 使用相同的算法和密钥重新计算签名
- 将计算结果与Token中的Signature进行对比
- 如果两者完全一致,说明Token未被篡改
在本工具中,输入正确的密钥后点击"验证签名",工具会自动完成以上步骤并显示验证结果。
none算法表示Token没有签名,存在严重安全风险:
- 攻击者可以修改Payload中的任何字段(如用户ID、权限)
- 如果服务器未正确验证算法类型,可能接受被篡改的Token
- 这是一种常见的JWT攻击向量,称为"算法混淆攻击"
本工具检测到none算法时会显示醒目的安全警告,提醒您检查服务器配置。生产环境应禁止接受none算法的Token。
UD5工具箱