JWT令人困惑。应用服务器如何进行身份验证?

JWT令人困惑。应用服务器如何进行身份验证?,jwt,Jwt,除了最后一部分,JWT上的图像非常清晰 我理解的部分: 1.编码与加密不同。 2.令牌的部分(报头base64编码、有效负载base64编码、报头签名+使用公钥和指定算法加密的有效负载) 但我不明白第5部分中如何处理令牌验证。我也不明白为什么报头和负载需要Base64编码。考虑到它不安全或不加密。。。编码的部分是什么 *****编辑**** 我的理解正确吗,因为JWT包含一个编码的头和有效负载。。。应用服务器只需使用其私钥(可能是非对称加密机制中的公钥)加密包含的有效负载和头,如果它到达相同的包

除了最后一部分,JWT上的图像非常清晰

我理解的部分: 1.编码与加密不同。 2.令牌的部分(报头base64编码、有效负载base64编码、报头签名+使用公钥和指定算法加密的有效负载)

但我不明白第5部分中如何处理令牌验证。我也不明白为什么报头和负载需要Base64编码。考虑到它不安全或不加密。。。编码的部分是什么

*****编辑****

我的理解正确吗,因为JWT包含一个编码的头和有效负载。。。应用服务器只需使用其私钥(可能是非对称加密机制中的公钥)加密包含的有效负载和头,如果它到达相同的包含JWT签名。。。然后应用程序服务器知道数据没有被篡改,用户确实通过了身份验证服务器的身份验证。是这样吗


如果签名不匹配。这意味着什么?

JWT
使用
base64Url
编码(请参阅),避免使用字符
+
/
=
,它们是URI的保留字符(请参阅中的第2.2节)
这是有意义的,因为在某些情况下,令牌作为url中的参数传输

如果使用非对称算法,散列将使用私钥完成,因此任何知道公钥的人都不可能创建新签名

教程中的步骤5告诉您,应用程序服务器将使用与身份验证服务器相同的密钥,从头和负载创建一个哈希,并比较它是否获得与在请求中收到的JWT中相同的值。 非匹配签名意味着有人更改了令牌,因此令牌被视为无效,授权将被拒绝。 从技术上讲,操作
JWT
的头和有效负载非常容易,只需解码
base64url
编码部分,更改
JSON
结构中的一些值,例如过期时间
exp
,然后再次编码。但是如果不知道私钥,就无法为其创建有效的签名


在“调试”窗口中查看并播放示例标记以查看效果。

您已经获得了它。若签名不匹配,应用程序不应创建任何会话。除了签名,应用程序还应该验证JWT的过期时间。在每个平台上都有许多库可以为您实现这一点。检查此页面:“使用与身份验证服务器相同的密钥”是什么意思?比如说,如果身份验证服务器使用其私钥创建JWT的签名,应用程序服务器将需要身份验证服务器的私钥从有效负载+头创建相同的签名,对吗?这是否意味着application server与authentication server共享相同的私钥?问题中提到的OP的原始教程不再可用,但我相信它是在谈论使用对称密钥算法(HS256)签名。然后,您只需要一个密钥来进行签名和验证。在非对称密钥算法的情况下,哈希在签名期间使用私钥加密,然后使用公钥解密以进行验证。我将看看如何编辑问题和答案,以便它们在没有链接的情况下仍然有意义。