在 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 执行此操作。
我正在尝试使用 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 执行此操作。