Arn*_*rno 5 javascript security jwt
我正在制作一个使用 JWT 令牌连接到 Api 的 javascript 客户端。在服务器端没有问题,我可以创建令牌对其进行签名,然后验证签名,从而确保没有人篡改令牌。
但是我如何在客户端做到这一点。我可以只解码 JWT 令牌并查看标头、有效负载和签名。但是我如何在客户端验证签名?是否有用于此的库,如何将公钥传输给客户端?
如果我不验证签名,我怎么知道令牌没有被篡改?
如果我不在客户端验证签名,我如何确保令牌确实来自服务器。?也许中间有人正在更改令牌
签名验证并不能避免中间人攻击。即使使用有效的令牌,攻击者也可以嗅探通道以捕获凭据或更改消息
使用SSL/TLS 通道 (https)
如果我不验证签名,我怎么知道令牌没有被篡改?
TLS 可信服务器提供的令牌可能是有效的。(它可能已在本地存储中被更改)。您可以验证签名。此操作通常在服务器端完成(见@sakuto 回答),但您可以完美地在浏览器中完成
但是我如何在客户端验证签名?
这些是步骤
我建议使用 Webcrypto。在此处查看 RSA 导入密钥和验证示例:https : //github.com/diafygi/webcrypto-examples/blob/master/README.md#rsassa-pkcs1-v1_5