【问题标题】:Node JWT library njwt verifies a token even though it differs from original节点 JWT 库 njwt 验证令牌,即使它与原始令牌不同
【发布时间】:2015-10-16 17:59:51
【问题描述】:

尝试使用 Stormpath 的 njwt package 来按照 @robertjd 的 this answer 处理 JWT。

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

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

这种行为对于 JWT 是否合法,即最后一个字符是多余的并且不影响验证校验和?还是 njwt 库的问题?

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

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

【问题讨论】:

    标签: token jwt


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-14
      • 2018-09-30
      • 2019-06-23
      • 2017-07-27
      • 2019-10-20
      • 2016-01-17
      • 2020-10-27
      • 2017-07-31
      • 2021-02-12
      相关资源
      最近更新 更多