我正在使用 Django REST API
(后端)和 React JS
(前端)开发一个项目。我正在使用 Json Web token
进行身份验证。但是我在这个问题上感到困惑,应该将 Json Web token
存储在 local storage
还是 cookies
中?哪一个更安全,为什么?大公司如何处理 API
和 客户端
之间的这种安全性问题?
我正在使用 Django REST API
(后端)和 React JS
(前端)开发一个项目。我正在使用 Json Web token
进行身份验证。但是我在这个问题上感到困惑,应该将 Json Web token
存储在 local storage
还是 cookies
中?哪一个更安全,为什么?大公司如何处理 API
和 客户端
之间的这种安全性问题?
根本问题是更安全的防御什么?
主要威胁是跨站点脚本攻击 (xss)。在这方面,如果将 cookie 设置为 httpOnly,则 cookie 明显更加安全。
然而,如果认证信息存储在 cookie 中,跨站请求伪造 (csrf) 就成为了一个问题,您必须实现 csrf 保护。虽然不至于末日到来,但您需要关注它。如果将认证令牌存储在本地存储中并作为标头发送,csrf 就不再是一个问题。
此外,具有过期时间的 cookie (持久 cookie) 经常保存在客户端的明文文件中,这可能或可能不是您的威胁模型中的有效威胁。
所以简而言之,这要视情况而定。总体而言,将令牌存储在 httpOnly 和安全的 cookie 中通常被认为是最安全的,但它会像上述那样产生影响。在大多数情况下,在本地存储中存储令牌也是可以接受的。更何况,如果您需要将令牌发送到多个后端(在不同的来源),您不能将其放在 cookie 中,因为它只能发送到自己的来源。
正如常言所说,细节决定成败(实现细节)。