JWT解密Token报错解决

前提: token与secretkey秘钥都是正确的,java解密失败;

JWT签名与本地计算的签名不匹配。JWT有效性无法断言,不应被信任。
错误:
io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature. JWT validity cannot be asserted and should not be trusted.

出现这个错误后,debug跟踪,发现是DefaultJwtSignatureValidator.isValid()方法校验失败,

所以,在排除token、secretkey是不是填写错误的原因后,猜测是不是因为token、或secretkey的二进制生成字符串时的字符集不同引起的,因此将

Jwts.parser()
        .setSigningKey(JWT_OTA_TOKEN_SECRET) // JWT_OTA_TOKEN_SECRET是字符串String
        .parseClaimsJws(token)
        .getBody();

改成了 

Jwts.parser()
        .setSigningKey(JWT_OTA_TOKEN_SECRET.getBytes()) // 默认字符集,UTF-8
        .parseClaimsJws(token)
        .getBody();

就解决了。

总结: secretkey的字符集,如果传入的是字符串,则转为byte[]时是采用ASCII的,而生成key是是采用UTF-8的,因此出现了解密异常。

思路:

1、确认token、secretkey的字符集;

2、token、secretkey调用getbytes()时,采用对应的字符集进行转换;

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值