在 cookie 和本地存储中存储 JWT 有什么好处吗?

Is there any benefit for storing JWT in both a cookie and local storage?

我正在尝试使用 express 为 node.js api 编写身份验证系统。我注意到如果我要使用 JWT 作为身份验证令牌,我有两个选择...

1.) 将令牌存储在cookie中,并添加CSRF保护。
2.) 让客户端在 Auth Header 中发送令牌并添加 XSS 保护。

我的问题是,将授权令牌存储在 cookie 中并让客户端将其发送到 Auth Header 以进行身份​​验证是否有任何好处?这样,如果由于某种原因 CSRF 保护失败,如果 header 中没有身份验证令牌,请求将失败。此外,如果 XSS 保护失败,请求仍需要 cookie 中的身份验证令牌。我想我的想法是,这将提供更多保护,并且它可能失败的唯一方法是通过成功的 XSS 攻击,然后是成功的 CSRF 攻击。

跟进问题:CSRF令牌是否是针对CSRF攻击的完整证明保护技术?

首先,我建议您先阅读 this 答案。我希望我能够在这里解决您关于 CSRF 和 XSS 的问题,以及我们应该使用 cookie 的原因和方式。

其次,您使用 localstorage 和 cookie 的方法很好。我看到的唯一问题是 localstorage 不能跨子域使用。如果您使用 cookie 并将 cookie 域设置为 example.com(将 example 替换为您的组织域),它将在所有子域中有效。因此,通过您的授权服务器验证的用户可以无缝登录 app1.example.com 和 app2.example.com。您将无法使用 localstorage 执行此操作。