【发布时间】:2020-05-14 16:23:07
【问题描述】:
我正在开发一个应用程序(前端:React,后端:Laravel)。当我发出登录请求时,我会从 Laravel 服务器获得 access_token。我将这个 access_token 保存在 localStorage 中。
现在的问题是任何人都可以在浏览器的开发人员工具中看到 access_token。 access_token 在请求标头中也可见。
如果用户有一段时间没有坐在他的座位上,那么其他用户可以窃取此 access_token 并粘贴到他的浏览器中,现在其他用户将能够作为第一个用户访问该应用程序。此外,我在其他网站上看到一些关于 localStorage 容易受到 XSS 攻击的讨论。
我的问题是这个 access_token 应该存储在哪里。如果我将 access_token 保存在某个 javascript 变量中,那么当用户关闭并重新打开浏览器或用户刷新页面时,access_token 就会丢失。并且会要求他重新登录,这对用户体验很不利。
如何保护 access_token 免受未经授权的访问?最佳做法是什么?
【问题讨论】:
-
为什么令牌生命周期应该是 1 小时或 30 分钟,然后在刷新令牌的帮助下过期后,您可以生成新令牌
-
您可能应该将令牌存储在一个变量中,并支持一种在用户关闭浏览器时重新验证用户身份的方法。虽然,你离开座位的例子在任何情况下都很容易受到攻击,但这就像把门开着一样,你几乎无法做任何事情来阻止人们得到它。这可能包含有用的信息:auth0.com/docs/tokens/guides/store-tokens
-
您可能想使用状态管理来存储它。无论你使用 prop Drill 还是 Redux。
标签: reactjs laravel rest access-token