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

Node JWT library njwt verifies a token even though it differs from original

@robertjd 试用 Stormpath 的 njwt package for handling JWTs as per

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

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

都试过了

该行为对于 JWT 是否合法,即最后一个字符是多余的并且不影响验证校验和?还是 njwt 库中的问题?

Sub-question 致 njwt 的维护者:在验证后取回令牌时,header 的 algo 属性 总是有一个值none。我在你的源代码中看到你明确地设置了它。这是为什么?

更新:关于njwt回调verify()"algo": "none"的sub-question,好像是"none"不包括数字签名,当我们在回调中获取令牌时就是这种情况。如果我错了请纠正我。

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

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