节点JWT库njwt验证令牌,即使它与原始令牌不同



根据@robertjd的回答试用Stormpath的njwt包来处理jwt。

在试图查看verify()令牌时出现的各种错误消息时,更改了令牌的单个字符(最后一个),期望验证失败,但令我惊讶的是它通过了并正确显示了令牌的内容。

更准确地说,我将最后一个字符从A更改为B。这似乎不是一般情况,因为进行其他单字符更改会导致预期的JwsParseError和消息Signature verification failed。我用默认的HS256HS512都试过了。

jwt的行为是否合法,即最后一个字符是冗余的,不影响验证校验和?或者这是njwt库中的问题?

njwt维护者的子问题:在验证后获得令牌时,头的algo属性始终具有none的值。我在你的源代码中看到你明确地设置了它。为什么呢?

Update:关于njwt回调verify()"algo": "none"的子问题,似乎"none"表示不包含数字签名,这就是我们在回调中获得令牌的情况。如果我说错了请指正

这是由于base64(技术上是base64url)编码,该编码在RFC 4648中定义。编码数据中最后一个(非填充)字符的低阶位可能不会被使用,因此从A更改为B可能不会对解码值产生实质性影响。

尝试更改除最后一个字符外的任何字符:)

最新更新