一文解决JWT相同签名不匹配问题【JWT signature does not match locally computed signature.】

        今天做项目的时候,涉及到一个支付记账的功能,想着不能将这些金额数据显示暴露的通过常规的请求体封装来进行传输,想着要是被中途抓包修改了不就麻烦了,所以考虑到这种安全性的需求,就利用上了JWT来进行数据的封装传递,避免了被中途抓包修改的情况。但是当和前端约定好密钥签名后,发现相同匹配的签名居然无法匹配?!代码如下:

前端代码:

const header = { alg: "HS256", typ: "JWT" };
// 设置JWT有效载荷
const payload = {
  uid: "wzx",
  point_amount: 100,
  pi_sum: 10,
  exp: Math.floor(Date.now() / 1000) + 600, // 过期时间(当前时间戳加1小时)
};
export function getJWTFun(alg, header, payload) {
  let token = KJUR.jws.JWS.sign(
    alg,
    JSON.stringify(header),
    JSON.stringify(payload),
    "pairuan"
  );

  return token;
}

后端代码:

public static Claims getUserIdFromToken(String token){
        JwtParser jwtParser = Jwts.parser();
        // 通过签名对Token进行解析,得到的结果是一个类似集合的封装类
        Jws<Claims> claimsJws = jwtParser.setSigningKey("pairuan").parseClaimsJws(token);
        return claimsJws.getBody();
    }

在上方的代码中可以发现,我俩的签名应该是可以匹配的才对,但是还是报了

        JWT signature does not match locally computed signature. JWT validity cannot be asserted and should

的异常。在确定令牌并未过期的基础上,通过几个小时的冲浪,终于找到一个合适的解决方案,那就是将令牌指定编码格式转换为一个byte数组,这样子就可以如愿匹配!!代码如下:

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学徒630

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值