尝试使用Stormpath njwt package按{@ 3}} {@ 3}}处理JWT。
在尝试查看verify()
令牌时的各种错误消息时,更改了令牌的单个字符(最后一个),期望验证失败,但令我惊讶的是它通过并显示了令牌的内容正确。
更确切地说,我将最后一个字符从A
更改为B
。这似乎不是一般情况,因为进行其他单个字符更改会导致带有消息JwsParseError
的预期Signature verification failed
。我尝试使用默认HS256
和HS512
。
这种行为对JWT是否合法,即最后一个字符是多余的,不会影响验证校验和?或者它是njwt库中的问题?
向njwt
的维护者提出子问题:在验证后取回令牌时,标头的algo
属性的值始终为none
。我在你的源代码中看到你明确地设置了它。那是为什么?
更新:关于njwt回调"algo": "none"
中verify()
的子问题,似乎"none"
表示不包含数字签名,当我们在回调中获得令牌时就是这种情况。如果我错了,请纠正我。
答案 0 :(得分:2)
这是由base64(技术上,base64url)编码引起的,该编码在RFC 4648中定义。可能不会使用编码数据中最终(非填充)字符的低位,因此从A
更改为B
可能不会对解码值产生重大影响。
尝试更改任何字符,但最后一个:)