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

Token 节点JWT库njwt验证令牌,即使它与原始令牌不同,token,jwt,Token,Jwt,按照@robertjd的要求,尝试处理JWT的Stormpath 当尝试查看verify()ing令牌时的各种错误消息时,更改了令牌的单个字符(最后一个字符),期望验证失败,但出乎意料的是,它通过并正确显示了令牌的内容 更准确地说,我将最后一个字符从A更改为B。这似乎不是一般情况,因为进行其他单字符更改会导致预期的JwsParseError,消息签名验证失败。我用默认的HS256和HS512都试过了 这种行为对于JWTs是否合法,即最后一个字符是冗余的,并且不会影响验证校验和?还是njwt图书馆

按照@robertjd的要求,尝试处理JWT的Stormpath

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

更准确地说,我将最后一个字符从
A
更改为
B
。这似乎不是一般情况,因为进行其他单字符更改会导致预期的
JwsParseError
,消息
签名验证失败
。我用默认的
HS256
HS512
都试过了

这种行为对于JWTs是否合法,即最后一个字符是冗余的,并且不会影响验证校验和?还是njwt图书馆的问题

njwt
维护人员的子问题:在验证后取回令牌时,标头的
algo
属性始终具有
none
值。我在源代码中看到您显式地设置了它。为什么呢

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

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

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