为什么要在cookie中存储JWT令牌?
我知道这种方法可以防止跨站点脚本(XSS)攻击,并且比本地存储更安全。但是,如果用户可以简单地在开发工具中查看JWT并看到令牌,这真的是个问题吗?
基本上,如果您想将数据存储在客户端某处,如果客户端足够确定,则将能够自己看到它。如果客户端无法使用自己的机器查找和查看数据,就无法在客户端机器上存储数据。
如果您将JWT存储在HttpOnly cookie中,那么它将比其他方法更安全,因为恶意脚本将不可能抓取凭据。正如您已经注意到的那样,客户端仍然可以手动读取它-但这通常被认为是可以的。如果没有数据可以存储在客户机上,那么另一种方法是要求客户机在每次请求时提供它们的凭据——但是如果没有存储,那将非常麻烦,以至于使系统无法使用。对于某些人来说,手动从不属于他们的浏览器中获取JWT也是一种奇怪的攻击向量,尽管这并非不可能。
所以-在不寻常的情况下,这是一个潜在的小问题(可以通过在服务器上执行更多的验证方法来缓解,比如检查原始网络和识别浏览器),但是无法在客户端上存储任何东西的替代方案可能会更糟。
根据您在JWT上存储的内容,您可以自由地对其进行加密,以便只有您的服务器可以解码它。这样,即使有访问客户端机器的人试图破坏它,他们所能做的就是逐字复制或删除它;他们不能修改它。