为什么 JWT 需要客户端验证?
Why should JWTs need to be verified by the client?
所以我的理解是,JWT 是由服务器使用私钥签名的,其合法性通过将 public 密钥解密签名与 header + 有效载荷进行比较来验证 both/either 服务器和客户端:
The tokens are signed by one party's private key (usually the
server's), so that both parties (the other already being, by some
suitable and trustworthy means, in possession of the corresponding
public key) are able to verify that the token is legitimate.1
我就想知道客户端有什么必要去验证JWT的真伪?我知道 SSL 使用相同的机制,在这种情况下 client-side 验证对我来说很有意义,因为证书包含客户端用来加密初始握手的 public 密钥。但我很难理解 public 可验证性在 JWT 的情况下有什么好处。如果 JWT 是非法的,它无论如何都会在服务器上失败,并且客户端除了将其添加到请求之外没有做任何特殊的事情。
难道不能只在服务器上使用一些私有盐进行散列来满足它的目的吗?服务器通过使用相同的盐对有效负载进行哈希处理并与签名进行比较来进行验证。在这种情况下,只有服务器可以验证,那又如何?
So my understanding is that a JWT is signed by the server with a private key and its legitimacy verified by comparing the public key decrypted signature against the header + payload by both/either the server and client:
这是不完整。可以使用密钥对的私钥(例如 RSA)或使用对称密钥(例如 HMAC)对 JWT 进行签名。在这种情况下,相同的密钥用于签署和验证令牌
I'm just wondering what need is there for the client to verify the authenticity of the JWT?
当使用非对称密钥对对令牌进行签名时,客户端会验证令牌。使用对称密钥,只有发行方知道,客户端无法验证
在这里查看我的回答:
I understand the same mechanism is used for SSL, in which case client-side verification makes sense to me as the certificate contains the public key used by the client to encrypt the initial handshake
握手中使用的一些数据由服务器使用其私钥进行数字签名(未加密),并由客户端验证
If the JWT were illegitimate, it'd fail on the server anyway, and the client isn't doing anything special aside from tacking it onto the request.
否,如果验证服务器与发卡服务器不同(再看一遍上面的link)。
假设令牌是由第三方(例如 goggle 或 facebook)作为 oauth2 身份验证过程的结果颁发的。它可以包含已连接用户的详细信息,并且已使用重定向将其提供给您的服务器,因此您不能信任调用方。您必须验证令牌是否已由预期方颁发。
所以我的理解是,JWT 是由服务器使用私钥签名的,其合法性通过将 public 密钥解密签名与 header + 有效载荷进行比较来验证 both/either 服务器和客户端:
The tokens are signed by one party's private key (usually the server's), so that both parties (the other already being, by some suitable and trustworthy means, in possession of the corresponding public key) are able to verify that the token is legitimate.1
我就想知道客户端有什么必要去验证JWT的真伪?我知道 SSL 使用相同的机制,在这种情况下 client-side 验证对我来说很有意义,因为证书包含客户端用来加密初始握手的 public 密钥。但我很难理解 public 可验证性在 JWT 的情况下有什么好处。如果 JWT 是非法的,它无论如何都会在服务器上失败,并且客户端除了将其添加到请求之外没有做任何特殊的事情。
难道不能只在服务器上使用一些私有盐进行散列来满足它的目的吗?服务器通过使用相同的盐对有效负载进行哈希处理并与签名进行比较来进行验证。在这种情况下,只有服务器可以验证,那又如何?
So my understanding is that a JWT is signed by the server with a private key and its legitimacy verified by comparing the public key decrypted signature against the header + payload by both/either the server and client:
这是不完整。可以使用密钥对的私钥(例如 RSA)或使用对称密钥(例如 HMAC)对 JWT 进行签名。在这种情况下,相同的密钥用于签署和验证令牌
I'm just wondering what need is there for the client to verify the authenticity of the JWT?
当使用非对称密钥对对令牌进行签名时,客户端会验证令牌。使用对称密钥,只有发行方知道,客户端无法验证
在这里查看我的回答:
I understand the same mechanism is used for SSL, in which case client-side verification makes sense to me as the certificate contains the public key used by the client to encrypt the initial handshake
握手中使用的一些数据由服务器使用其私钥进行数字签名(未加密),并由客户端验证
If the JWT were illegitimate, it'd fail on the server anyway, and the client isn't doing anything special aside from tacking it onto the request.
否,如果验证服务器与发卡服务器不同(再看一遍上面的link)。
假设令牌是由第三方(例如 goggle 或 facebook)作为 oauth2 身份验证过程的结果颁发的。它可以包含已连接用户的详细信息,并且已使用重定向将其提供给您的服务器,因此您不能信任调用方。您必须验证令牌是否已由预期方颁发。