如何实现安全的“记住我”

Mat*_*ene 8 javascript security bcrypt jwt reactjs

我想弄清楚如何在我正在开发的应用程序中实现“记住我”。目前我的实现看起来像这样。

  1. 用户登录并请求被记住
  2. 服务器使用电子邮件/密码验证用户
  3. 如果验证成功,我将使用用户的电子邮件和存储在服务器上的密钥生成一个 JSON Web 令牌。
  4. 然后将令牌作为 cookie 发送回客户端。但同时令牌使用 bcrypt 进行散列并存储在数据库中的用户信息中。
  5. 现在,当用户稍后访问该页面时,该 cookie 会在页面加载并根据数据库中存储的哈希进行验证时发送到服务器。

对我来说,这“似乎”是安全的,因为令牌本质上成为用户的密码并在服务器端进行相应处理。但是,我不确定这是否真的安全,或者我是否遗漏了什么。

Min*_*ato 3

您可以使用 HTML5 Web Storage API代替 cookie 。它更加安全,并且受到所有现代浏览器(IE8+)的支持。

LocalStorage是围绕 Web Storage API 的一个很好的接口。它是一种客户端持久存储形式,没有任何过期时间(直到用户清除它)或开发人员通过 JavaScript 进行操作。

您可以进一步研究Cookie 和 LocalStorage 之间的这个答案差异