我试图了解JWT是如何在我正在审查的代码库中实现的。我读过这和这
然而,在这个代码库中,客户端似乎拥有私钥和公钥.它拥有服务器的公钥和自己的私钥(我假设服务器有相应的私钥)。为什么有这个必要?客户端不应该只需要公钥而服务器只需要私钥吗?如果客户端正在加密一条消息,难道它不能使用公钥来加密它,而服务器只需要私钥来解密它吗?相反,它不能用它的公钥解密来自服务器的加密消息吗?为什么客户端需要两套公钥和私钥?
从阅读中看:
要创建数字签名,签名软件(如电子邮件程序)将创建要签名的电子数据的单向散列。然后使用用户的私钥加密哈希,返回哈希数据特有的值。加密哈希和其他信息(如散列算法)形成数字签名。数据中的任何更改,即使是单个比特,都会导致不同的哈希值。此属性使其他人能够通过使用签名者的公钥解密哈希来验证数据的完整性。如果解密后的哈希匹配同一数据的第二个计算哈希,则证明数据自签名以来没有更改。
发布于 2017-02-08 19:50:19
JWT使用发送方的私钥签名(而不是加密)。jWT内容可以选择使用JWE加密。
对称密钥用于签名和验证。使用非对称密钥对,消息将使用私钥签名,并与公共验证。
数字签名保护消息免遭更改,并识别发送方。非对称密钥允许接收方使用发送方的公钥验证签名,而不损害私钥
JWT签名可以根据目的在客户端或服务器端使用。例如,在身份验证流中
在内部,数字签名涉及多个加密操作、消化消息、加密哈希和添加算法标识符。但是您不必担心这一点,因为所有编程语言都支持它。
我试图以一般的方式解释JWT&数字签名,而不是回答您的具体问题。我可能留下了一些。请评论
https://stackoverflow.com/questions/42118497
复制相似问题