我正在使用 React 和 Nestjs 在我的 Web 应用程序服务器中实现授权令牌逻辑。
我知道在 cookie 中存储令牌是客户端存储中最安全的。(例如 localStorage)。所以我将刷新令牌存储在 cookie 中。
但是当涉及到访问令牌时。避免使用 cookie 更好吗?
我听说在 cookie 中存储两个令牌(访问刷新)有遭受 CSRF 攻击的风险。 并且可能有一些设备不支持cookie。
另一件事是我需要在子域之间共享令牌(我知道这可以使用 cookie)。如果我想要这个,我可以只共享刷新令牌吗?
总结一下 1.将访问刷新存储到cookie中 2.将刷新存储在cookie中并在其他地方(可能是本地存储)中进行访问。
哪个更好?
第二种方法也适用于子域环境吗?
谢谢!
选项 1-(将两者都存储在 cookie 中)如果您使用强大的 CSRF 保护机制(例如,CSRF 令牌或 SameSite cookie 属性),则可以工作。如果这样做,这可以简化跨子域的令牌共享,但请记住保持访问令牌短暂。
此方法简化了跨子域的令牌共享,因为 cookie 会自动处理此问题,但您需要确保访问令牌的生命周期较短,以限制在泄露时的暴露。
选项 2-(刷新 cookie 中的令牌,localStorage 中的访问令牌)提供更好的 CSRF 保护,但引入了一些 XSS 风险。它可以在子域环境中工作,但访问令牌不会在子域之间自动共享。您必须依靠刷新令牌来根据每个子域的需要请求新的访问令牌。
跨子域共享令牌需要额外的逻辑来根据每个域的需要刷新访问令牌,从而增加了复杂性。
考虑到您在子域之间共享的要求,具有 CSRF 保护的选项 1 对于您的用例来说可能更简单。