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

时间:2015-07-26 14:22:08

标签: token jwt

尝试使用Stormpath njwt package按{@ 3}} {@ 3}}处理JWT。

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

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

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

njwt的维护者提出子问题:在验证后取回令牌时,标头的algo属性的值始终为none。我在你的源代码中看到你明确地设置了它。那是为什么?

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

1 个答案:

答案 0 :(得分:2)

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

尝试更改任何字符,但最后一个:)