为何jwt.io与Postman生成的JWT在启用Base64编码时不一致?
Postman与jwt.io生成JWT不一致的原因分析
当启用「Secret Base64 encoded」选项后,两个工具对密钥的处理逻辑完全相反,这是导致令牌不一致的核心原因:
禁用选项时:两者都直接使用你输入的明文密钥作为签名的原始字节,所以生成的令牌完全匹配。
启用选项时:
- jwt.io:将你输入的密钥视为已经Base64编码后的字符串,会先把它解码成二进制字节序列,再用这个字节序列作为HMAC签名的密钥。
- Postman:将你输入的密钥视为明文,会先把它编码成Base64字符串,再用这个Base64字符串的字节作为HMAC签名的密钥。
举个实际例子:假设输入密钥为mysecret
- 禁用选项:两者都用
mysecret的原始字节签名,结果一致。 - 启用选项:
- jwt.io尝试解码
mysecret(但它不是有效Base64,会得到错误的字节数据),用错误数据签名; - Postman将
mysecret编码为bXlzZWNyZXQ=,用这个字符串的字节签名;
最终两者的签名密钥完全不同,生成的令牌自然不一致。
- jwt.io尝试解码


内容的提问来源于stack exchange,提问作者user3075978
相关产品推荐
相关产品推荐

