存储令牌和身份验证状态的安全方法是啥?
Posted
技术标签:
【中文标题】存储令牌和身份验证状态的安全方法是啥?【英文标题】:What's a secure way to store token & auth state?存储令牌和身份验证状态的安全方法是什么? 【发布时间】:2020-09-28 21:13:38 【问题描述】:这是我的场景:
当用户登录时,会进行 API 调用,如果他的凭据有效,则会返回一个令牌。我需要将身份验证状态(以保持用户登录)和令牌存储在某处。该令牌将用于进行其他 API 调用。
我读过这些帖子:1、2、3(和其他一些)似乎都相互矛盾;无论是localStorage
、cookies
还是JWT
,都被不同的人认为是不安全的。我也读过react-redux
,但我不确定。
现在我完全不知道哪种解决方案最适合我的需求,因为我是 reactJs
的新手。那么,什么是正确的方法呢?
【问题讨论】:
Redux 是正交的;它只是一个状态管理工具。 “正确”的方式取决于; “令牌”有些模糊。 API 调用给谁? 你的应用?外部应用? @DaveNewton 每个用户都被分配了一个令牌。此令牌将用于对后端的 API 调用,该调用将获取数据以显示在 react 应用的不同页面上 简单答案使用cookies
。 JWT
's 不应该用于存储令牌,localStorage
不安全。我也在努力在 reactjs 上实现 cookie。
@Tony 是的,我终于使用了cookies
。我使用了js-cookie
(github.com/js-cookie/js-cookie)。如果您遇到问题,请检查一下;使用起来真的很简单
@jo12345678 终于有用了。非常感谢。
【参考方案1】:
最常见的做法是将您的令牌存储在 cookie 中并将 HttpOnly
设置为 true
,这样任何 javascript 代码都无法以编程方式读取您的令牌。
我想你使用axios
作为ajax客户端,你可以这样发出请求
axios.get('https://example.com/api',
withCredentials: true
)
通过这样做,axios
会自动将您的 cookie 发送到远程服务器
【讨论】:
以上是关于存储令牌和身份验证状态的安全方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
为 restify.js 实现基于令牌的身份验证的最佳方法是啥?