我的SPA使用React作为前端,使用laravel API作为后端。
当用户登录(通过axios和api)时,api返回访问(Bearer token)作为响应。我使用react-cookie框架将访问令牌作为cookie存储在浏览器中。此cookie将被读取并用于将来的任何请求。
这是正确的方法吗? cookie数据不是浏览器中的任何攻击者都可以轻松获取的吗?因为它只是一个文件,计算机在某处。
什么阻止攻击者抓取该cookie,冒充该用户并开始执行需要身份验证的操作?
令牌的寿命可以说是1年。它只会在用户每次登录时刷新。我知道如果我将寿命设置得更短,那么它将更安全。但是,这意味着用户必须不断登录?
----- -----更新
我不确定提供的解决方案是否能解决我的问题。 SPA应用程序是基于前端的,并且请求可以来自任何地方,例如邮递员,移动应用程序或任何希望与我的支持服务器通信的第三方设备。因此,这些设备需要一种在本地存储一些访问令牌的方法,以用于将来的任何请求。
我知道这种情况的唯一方法是让我的服务器向请求者发送一些身份验证令牌并将其存储在某个地方以用于下一个请求。
在这种情况下,我不确定CSRF令牌或任何其他方式是否有助于我的关注?
就像facebook一样,如果我清除缓存,我将不得不重新登录。这意味着Facebook正在我的位置计算机上存储一些东西,所以我可以在下次自动进行身份验证
我只想添加一些在cookie中存储令牌的缺点,你也应该注意:
-------更新-----
您也可以使用cookie来存储身份验证令牌,即使它更好(至少在我看来比使用本地存储,或者像Redis这样的会话中间件)。如果我们放弃httpOnly和安全标志,有一些不同的方法来控制cookie的生命周期:
您的JS不应该访问cookie。您可以在Cookie上设置有助于保护它们的标志,并确保它们仅用于正确的目的。
HttpOnly标志设置在cookie上,然后JS将无法访问它,但它仍将与任何请求一起发送。
SameSite标志将确保cookie仅被发送回给您的网站。这可以防止泄漏。
Secure标志将使它仅通过安全连接发送cookie,以防止有人从您的网络流量中嗅探它。
编辑
您可能想要查找授权工作流,但其要点是:
请看@tpopov的答案,因为他也提出了一些非常好的观点。