【问题标题】:Store JWT Token in closure关闭存储 JWT 令牌
【发布时间】:2021-12-27 07:16:52
【问题描述】:

我听说JWT令牌建议存储如下:

  • access_token 在应用程序内存中(作为我得到的示例 - 闭包)
  • refresh_token 在 cookie 条目中 (HttpOnly)

目前,我的access_token存储在localStorage中,用于查看授权状态:

isLoggedIn: state => !!state.token 在 Vuex 中

refresh_token 存储在 cookie 中。

我想摆脱这个。我想知道如何仍然将 access_token 存储在 closure 中?

【问题讨论】:

  • 在闭包中存储令牌有什么意义?刷新页面不会丢失吗?
  • @HarunYilmaz localStorage 不安全,http 只有cookie是不可能的,因为JS无权访问它们,那么存储在哪里呢?
  • 无,让用户每次刷新页面时重新登录。那样你觉得可以吗?大多数人没有。是的,localStorage 不是绝对安全的,但也与 cookie 相同。您必须在安全性和便利性之间进行权衡。阅读LocalStorage vs Cookies
  • 您所听到的是正确的。永远不要将令牌存储在本地存储中,因为它可以使用 javascript 轻松访问。您可以将访问令牌存储在内存中,并在 httpOnly cookie 中刷新令牌。但是,由于您无法从 javascript 中读取 httpOnly Cookie,因此您需要使用 refresh_token cookie 在每次重新加载页面时使用 API 获取访问令牌和用户详细信息,然后将访问令牌存储在内存中,并将用户详细信息存储在本地存储中。
  • @Ashwin Valento 事实证明,我获得了 access_token 并将其保存在 Vuex 中,并且每次使用 refresh_token (记录在 cookie 中)刷新页面时 - 我都会获得用户信息和新的 access_token 和更新状态?

标签: javascript vue.js jwt vuex


【解决方案1】:

将令牌保存在闭包中将取决于您使用的确切实现,并且在没有任何示例代码的情况下有点难以演示。也许您可以将部分代码发布到您获取访问令牌和使用访问令牌的位置?

不过,要将令牌存储在内存中,它不必是闭包。您甚至可以将其保持在 vue 的状态 - 如果您不使用任何将状态保存在本地存储中的插件。

如果您想将所有令牌保存在一个仅限 http 的 cookie 中,您可以通过添加一个轻量级后端组件来实现它,该组件将为您处理令牌。它为您的应用程序增加了一些复杂性,但增加了安全性。这就是我们在 Curity 中所说的令牌处理程序模式:https://curity.io/resources/learn/the-token-handler-pattern/

【讨论】:

  • 事实证明,我获得了 access_token 并将其保存在 Vuex 中,并且每次使用 refresh_token (记录在 cookie 中)刷新页面时 - 我都会获得用户信息和新的 access_token 并将其更新为状态?
  • 是的,这是一种可行的方法。
猜你喜欢
  • 2019-02-01
  • 2018-12-07
  • 2019-05-06
  • 1970-01-01
  • 2020-07-24
  • 2016-03-15
  • 2020-03-23
  • 2018-10-18
  • 2020-08-25
相关资源
最近更新 更多