【问题标题】:Why JWT Token signing key is required为什么需要 JWT Token 签名密钥
【发布时间】:2021-01-13 17:13:14
【问题描述】:

JWT 令牌需要签名密钥才能对其进行解码,但在 https://jwt.io/ 中无需任何签名密钥即可解码,这怎么可能。

【问题讨论】:

  • 不,解码不需要签名密钥,但需要验证签名。并且您的服务不得在未验证其签名的情况下使用 jwt。
  • 密钥用于对令牌进行签名或验证现有令牌的签名。标头和有效负载可以轻松解码,它们只是 Base64Url 编码。
  • 一些吹毛求疵:JWT 中的“T”代表“token”,所以写 JWT token 是多余的。
  • 请注意 jwt.io 中的“验证签名”块 - 这就是您的签名密钥发挥作用的地方。

标签: jwt


【解决方案1】:

您不需要密钥来打开编码,您需要一个密钥来验证没有人更改 JWT 的内容。实际上,您看到的字符串只是 json 的 base64,其中包含您的信息、元数据和所有内容的“签名”。

签名是 JSON Web Token (JWT) 中最重要的部分。签名是通过使用 Base64url 编码对标头和有效负载进行编码并将它们与句点分隔符连接起来来计算的。然后将其提供给加密算法。

// signature algorithm
data = base64urlEncode( header ) + “.” + base64urlEncode( payload )
signature = HMAC-SHA256( data, secret_salt )

因此,当标头或有效负载发生变化时,必须重新计算签名。只有Identity Provider(IdP)有私钥来计算签名,防止token被篡改。

阅读更多:

https://medium.com/@sureshdsk/how-json-web-token-jwt-authentication-works-585c4f076033 https://jwt.io/introduction/

https://www.youtube.com/watch?v=7Q17ubqLfaM

【讨论】:

  • 接收端要么有公钥可以在本地解码验证,要么调用身份提供者的url来进行实际的签名验证。
猜你喜欢
  • 1970-01-01
  • 2019-03-28
  • 2017-04-27
  • 1970-01-01
  • 2018-10-23
  • 2016-11-17
  • 2018-09-05
  • 2023-04-09
  • 2019-08-17
相关资源
最近更新 更多