存储令牌和身份验证状态的安全方法是啥?

Posted

技术标签:

【中文标题】存储令牌和身份验证状态的安全方法是啥?【英文标题】:What's a secure way to store token & auth state?存储令牌和身份验证状态的安全方法是什么? 【发布时间】:2020-09-28 21:13:38 【问题描述】:

这是我的场景:

当用户登录时,会进行 API 调用,如果他的凭据有效,则会返回一个令牌。我需要将身份验证状态(以保持用户登录)和令牌存储在某处。该令牌将用于进行其他 API 调用。

我读过这些帖子:1、2、3(和其他一些)似乎都相互矛盾;无论是localStoragecookies 还是JWT,都被不同的人认为是不安全的。我也读过react-redux,但我不确定。

现在我完全不知道哪种解决方案最适合我的需求,因为我是 reactJs 的新手。那么,什么是正确的方法呢?

【问题讨论】:

Redux 是正交的;它只是一个状态管理工具。 “正确”的方式取决于; “令牌”有些模糊。 API 调用给谁? 你的应用?外部应用? @DaveNewton 每个用户都被分配了一个令牌。此令牌将用于对后端的 API 调用,该调用将获取数据以显示在 react 应用的不同页面上 简单答案使用cookiesJWT'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 实现基于令牌的身份验证的最佳方法是啥?

使用 APIRequestFactory 测试基于令牌的身份验证的正确方法是啥?

使用访问令牌和刷新令牌保持身份验证

如何在 Angular 应用程序中存储身份验证令牌

Web API 安全和身份验证 - 不记名令牌