根据@robertjd的回答试用Stormpath的njwt包来处理jwt。
在试图查看verify()
令牌时出现的各种错误消息时,更改了令牌的单个字符(最后一个),期望验证失败,但令我惊讶的是它通过了并正确显示了令牌的内容。
A
更改为B
。这似乎不是一般情况,因为进行其他单字符更改会导致预期的JwsParseError
和消息Signature verification failed
。我用默认的HS256
和HS512
都试过了。
jwt的行为是否合法,即最后一个字符是冗余的,不影响验证校验和?或者这是njwt库中的问题?
njwt
维护者的子问题:在验证后获得令牌时,头的algo
属性始终具有none
的值。我在你的源代码中看到你明确地设置了它。为什么呢?
Update:关于njwt回调verify()
中"algo": "none"
的子问题,似乎"none"
表示不包含数字签名,这就是我们在回调中获得令牌的情况。如果我说错了请指正
这是由于base64(技术上是base64url)编码,该编码在RFC 4648中定义。编码数据中最后一个(非填充)字符的低阶位可能不会被使用,因此从A
更改为B
可能不会对解码值产生实质性影响。
尝试更改除最后一个字符外的任何字符:)