因此,我的理解是服务器通过私钥对JWT进行签名,并通过比较服务器和客户端(无论是服务器还是客户端)的公钥解密签名与标头+有效负载来验证其合法性:
令牌是由一方的私钥(通常是 服务器),这样双方(另一方已经存在) 拥有适当的和可信赖的手段 公钥)能够验证令牌是合法的。 1
我只是想知道客户端需要什么来验证JWT的真实性?我知道SSL使用相同的机制,在这种情况下,客户端验证对我来说很有意义,因为证书包含客户端用来加密初始握手的公共密钥。但是我很难理解对于JWT而言,公共可验证性有什么好处。如果JWT是非法的,无论如何它都会在服务器上失败,并且除了将其附加到请求之外,客户端没有做任何特别的事情。
仅使用服务器上的一些私有盐进行哈希处理是否可以满足其服务的目的?服务器通过用相同的盐对有效负载进行哈希处理并与签名进行比较来进行验证。在这种情况下,只有服务器可以验证,但是怎么办?
答案 0 :(得分:2)
因此,我的理解是服务器通过私钥对JWT进行签名,并通过比较服务器和客户端(无论是服务器还是客户端)的公钥解密签名与标头+有效负载来验证其合法性:
这是不完整。可以使用密钥对的私钥(例如RSA)或对称密钥(例如HMAC)对JWT进行签名。在这种情况下,使用相同的密钥来签名和验证令牌
我只是想知道客户端需要什么来验证JWT的真实性?
当使用非对称密钥对对令牌进行签名时,预计客户端将验证令牌。使用对称密钥,只有发行方知道它,因此客户无法验证它
在这里查看我的答案:When to use RS256 for JWT?
我了解SSL使用相同的机制,在这种情况下,客户端验证对我来说很有意义,因为证书包含客户端用来加密初始握手的公共密钥
握手中使用的某些数据由服务器使用其私钥进行数字签名(未加密),并由客户端进行验证
如果JWT不合法,无论如何它都会在服务器上失败,并且除了将其附加到请求之外,客户端没有做任何特别的事情。
否,如果验证服务器与发布服务器不同(请再次查看上述链接)。
假设令牌是由于oauth2身份验证过程而由第三方(例如goggle或facebook)发行的。它可以包含已连接用户的详细信息,并且已使用重定向将其提供给您的服务器,因此您不能信任主叫方。您必须验证令牌已由预期方发出。