验证 jwt 令牌 [rsa]
Verifying jwt tokens [rsa]
我和一个同事一直在试图理解 jwt 令牌如何验证令牌,但从我们的阅读中我们似乎感到困惑。
请大家帮忙确认一下我的想法是否正确
- 使用私钥对令牌进行签名。签名是 header 和使用私钥加密的有效负载的组合,并作为签名的最后一部分添加到 jwt。
- 为了验证令牌,接收方可以使用 public 密钥复制此过程。他们对 header 和有效负载进行加密,以查看它是否与签名相同。注意这不是解密。接收方没有解密令牌(这是我们不确定的主要事情)。
-接收方无法发行新令牌,因为他们没有用于加密新令牌的私钥。
我已经阅读了关于 RS256 和 HS256 的 jwt 文档,但仍在努力确认我的想法,因此 post。
您可以在官网获取JWT auth tokens的详细说明
https://jwt.io/introduction/
令牌可以使用密钥对、私有密钥和 public 进行数字签名,或者使用秘密密钥进行哈希处理:
RS256
:RSA 密钥对与 SHA256。令牌使用私钥签名并使用 public
进行验证
HS256
:使用 SHA256 的 HMAC 密钥。签名和验证密钥相同
紧凑的 JWT 看起来像这样 hhhhh.ppppp.sssss
hhhhh
:JWT 头部,包括用于对令牌进行签名的算法。例如 {"alg":"RS256","typ":"JWT"}
。以 base64url
编码
ppppp
:JWT 的有效负载,包括一些有用的声明,如 sub
、iss
或 exp
。以 base64url
编码
sssss
:JWT 的签名,使用指定算法对 header 和 payload 的 base64 url 编码进行串联,并以 base64 编码。例如 b64(signature(hhhhhh.pppppp))
回答您的问题,您指的是 RS256
使用密钥对,其中客户端使用 public 密钥验证令牌(使用 HMAC 密钥进行验证意味着客户端和服务器共享密钥)
令牌是用我上面写的算法签名的(未加密)。为了验证,客户端使用提供的 public 密钥验证签名与令牌 hhhhhh.pppppp
的第一部分匹配。数字签名验证是所有现代语言都支持的标准操作。请注意,这与 encryption/decryption
不同
我在学习多重签名算法时遇到了同样的问题。所以,当我们在 JWT 中使用 RSASHA256 唱歌和验证唱歌时,是这样的过程:
- 符号 = RSA(SHA256(base64(header) + "." + base64(payload)), private_key)
- 符号有效,如果 RSA(Sign, public_key) 等于 SHA256(base64(header) + "." + base64(payload))
我和一个同事一直在试图理解 jwt 令牌如何验证令牌,但从我们的阅读中我们似乎感到困惑。
请大家帮忙确认一下我的想法是否正确
- 使用私钥对令牌进行签名。签名是 header 和使用私钥加密的有效负载的组合,并作为签名的最后一部分添加到 jwt。
- 为了验证令牌,接收方可以使用 public 密钥复制此过程。他们对 header 和有效负载进行加密,以查看它是否与签名相同。注意这不是解密。接收方没有解密令牌(这是我们不确定的主要事情)。 -接收方无法发行新令牌,因为他们没有用于加密新令牌的私钥。
我已经阅读了关于 RS256 和 HS256 的 jwt 文档,但仍在努力确认我的想法,因此 post。
您可以在官网获取JWT auth tokens的详细说明 https://jwt.io/introduction/
令牌可以使用密钥对、私有密钥和 public 进行数字签名,或者使用秘密密钥进行哈希处理:
RS256
:RSA 密钥对与 SHA256。令牌使用私钥签名并使用 public 进行验证
HS256
:使用 SHA256 的 HMAC 密钥。签名和验证密钥相同
紧凑的 JWT 看起来像这样 hhhhh.ppppp.sssss
hhhhh
:JWT 头部,包括用于对令牌进行签名的算法。例如{"alg":"RS256","typ":"JWT"}
。以 base64url 编码
ppppp
:JWT 的有效负载,包括一些有用的声明,如sub
、iss
或exp
。以 base64url 编码
sssss
:JWT 的签名,使用指定算法对 header 和 payload 的 base64 url 编码进行串联,并以 base64 编码。例如b64(signature(hhhhhh.pppppp))
回答您的问题,您指的是 RS256
使用密钥对,其中客户端使用 public 密钥验证令牌(使用 HMAC 密钥进行验证意味着客户端和服务器共享密钥)
令牌是用我上面写的算法签名的(未加密)。为了验证,客户端使用提供的 public 密钥验证签名与令牌 hhhhhh.pppppp
的第一部分匹配。数字签名验证是所有现代语言都支持的标准操作。请注意,这与 encryption/decryption
我在学习多重签名算法时遇到了同样的问题。所以,当我们在 JWT 中使用 RSASHA256 唱歌和验证唱歌时,是这样的过程:
- 符号 = RSA(SHA256(base64(header) + "." + base64(payload)), private_key)
- 符号有效,如果 RSA(Sign, public_key) 等于 SHA256(base64(header) + "." + base64(payload))