节点 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
。我用默认的 HS256
和 HS512
.
都试过了
该行为对于 JWT 是否合法,即最后一个字符是多余的并且不影响验证校验和?还是 njwt 库中的问题?
Sub-question 致 njwt
的维护者:在验证后取回令牌时,header 的 algo
属性 总是有一个值none
。我在你的源代码中看到你明确地设置了它。这是为什么?
更新:关于njwt回调verify()
中"algo": "none"
的sub-question,好像是"none"
不包括数字签名,当我们在回调中获取令牌时就是这种情况。如果我错了请纠正我。
这是由于在 RFC 4648 中定义的 base64(技术上,base64url)编码。编码数据中最终(非填充)字符的低位可能不会被使用,因此从 A
更改为 B
可能不会对解码数据产生 material 影响值。
尝试更改除最后一个以外的任何字符:)
@robertjd 试用 Stormpath 的 njwt package for handling JWTs as per
在尝试查看 verify()
使用令牌时出现的各种错误消息时,更改了令牌的单个字符(最后一个字符)以期验证失败,但令我惊讶的是它通过了并且正确显示令牌的内容。
更准确地说,我将最后一个字符从 A
更改为 B
。这似乎不是一般情况,因为进行其他单个字符更改会导致预期的 JwsParseError
和消息 Signature verification failed
。我用默认的 HS256
和 HS512
.
该行为对于 JWT 是否合法,即最后一个字符是多余的并且不影响验证校验和?还是 njwt 库中的问题?
Sub-question 致 njwt
的维护者:在验证后取回令牌时,header 的 algo
属性 总是有一个值none
。我在你的源代码中看到你明确地设置了它。这是为什么?
更新:关于njwt回调verify()
中"algo": "none"
的sub-question,好像是"none"
不包括数字签名,当我们在回调中获取令牌时就是这种情况。如果我错了请纠正我。
这是由于在 RFC 4648 中定义的 base64(技术上,base64url)编码。编码数据中最终(非填充)字符的低位可能不会被使用,因此从 A
更改为 B
可能不会对解码数据产生 material 影响值。
尝试更改除最后一个以外的任何字符:)