【问题标题】:How the jwt tokens are actually being created within jwt.io website? [closed]jwt 令牌是如何在 jwt.io 网站中实际创建的? [关闭]
【发布时间】:2021-05-04 04:23:02
【问题描述】:

我有一个使用基于 JWT 令牌的授权的应用程序。

我用 jjwt 依赖创建了一个 JWT 令牌。出于好奇,我使用了相同的密钥、相同的有效负载、相同的标头和相同的散列算法,并尝试从 jwt.io 网站创建一个 jwt 令牌。不幸的是,那里生成的令牌签名与我在代码中手动创建的签名完全不同。

谁能告诉我这背后的原因?

【问题讨论】:

  • 当您使用程序验证签名时,签名是不同还是无效?对于相同的输入(相同的标头、有效负载、密钥),您将获得相同的输出(签名)。相同意味着相同的字符串。如果只有一点差异,签名将完全不同。空白不计算在内,因为它在 base64 转换之前被剥离。查看生成令牌和两个不同令牌的代码可能会有所帮助。

标签: java spring spring-boot spring-security jwt


【解决方案1】:

JWT 的签名是哈希函数的输出。此函数的输出可能取决于您提到的字段other。例如,您的 JWT 可能有一个 Issued At Time (iat) 字段,这对于您正在检查的两个令牌来说是不同的。如果是这样,那么来自两个令牌的校验和也不会相同。

我的一般建议是验证您的 JWT 中的 所有 字段是否确实相同。

【讨论】:

  • 是的,我知道。当我的服务器创建令牌时,我将在每个 API 调用中为同一用户获得不同的令牌。因为我正在为令牌设置过期时间。并且到期时间就像当前时间+ 2天。但这里不是这样。我正在获取令牌并将其粘贴到 jwt.io 网站中,并获取标头和有效负载,并尝试使用与我的服务器使用的相同密钥完全相同的值创建一个新的 jwt 令牌。这次令牌不是由我的服务器生成的。
  • @jithinMV 您确定jwt.io 站点和您的代码使用相同的算法来生成签名吗?
  • 是的,他们都使用 HS512
猜你喜欢
  • 2020-04-18
  • 1970-01-01
  • 2014-12-28
  • 2016-04-05
  • 2019-12-01
  • 2021-07-28
  • 1970-01-01
  • 2021-01-25
相关资源
最近更新 更多