gpt4 book ai didi

内存中的 JWT 访问 token ?

转载 作者:行者123 更新时间:2023-12-04 12:09:44 26 4
gpt4 key购买 nike

我已经花了很多时间在这上面,这是我第一次使用 JWT,真的需要你的一些想法。
现在我将我的 token 存储在单独的 httpOnly cookie 中(我的访问 token 在 15 分钟后过期,并在 7 天后刷新 token )。
我已经读到存储 token 的最安全方法实际上是使用 cookie 作为刷新 token 和内存中(如在变量中)作为访问 token 。
虽然我知道这是安全的,但我并不真正了解它在实践中是如何工作的。这是否意味着我们必须在每个请求上使用刷新 token 创建一个新的访问 token ?或者有没有办法让它有效并复制到新变量,直到它过期?
我正在使用 react 和节点 btw。

最佳答案

我也花了几天的时间来阅读这个。
从我收集到的解决方案将是这样的:

  • 用户使用登录名和密码登录。
  • 服务器生成一个长期存在的刷新 token 作为 HttpOnly Cookie 存储,防止 XSS 攻击,因为它不能被 Javascript 访问。
  • 理想情况下,可以在服务器端使用某种黑名单,以防止重新使用尚未到期但已被替换的刷新 token 。

  • 生成可以存储在 localStorage 或内存中(在变量中)的访问 token 。访问 token 的有效期很短,只有几分钟。
  • 如果存储在 localStorage 中, token 不会在重新加载页面/浏览器 (F5) 时消失。它也将在控制台/存储中可见。
  • 当使用 localStorage 检查用户是否通过身份验证时,代码将尝试从 localStorage 读取 token ,jwt_decode 并使用 token 中的数据设置用户变量。
  • 由于 token 没有加密,只有 base64,它们的值可以在开发控制台中更改。如果权限更改,则只会呈现“角色:管理员”页面。如果 token 被篡改,API 将负责检查权限并拒绝请求。
  • Afaik,如果它存储在一个变量中,它会不太明显,它也会在重新加载页面/浏览器时被删除。
  • 使用变量时,为了避免在每个请求上刷新访问 token ,我们可以使用 Context API,通过使用经过身份验证的用户上下文创建一个组件,该组件将包装 App/Router,然后在需要保护的每个页面上导入和使用此上下文并在需要时重定向。

  • 当访问 token 不再有效时,因为它已经到期,或者因为它已被删除,API 调用将被拒绝。拦截此调用,然后调用 API 刷新路由以使用刷新 token 生成新的访问 token 。
  • 我使用 axios 和 axios 拦截器来拦截失败的请求,调用刷新路由,设置更新的访问 token ,然后重试失败的请求。 (显然需要是一个 GET 请求以避免 CSRF 错误)。
  • 此外(不是代替),可以使用 setTimeout 每 X 分钟自动刷新访问 token 以防止其过期。

  • 要注销,请删除 cookie(最终成为黑名单)并删除上下文/localStorage。

  • 使用 axios, axios.defaults.withCredentials = true;确保 cookie 与请求和 { headers: { 'Authorization': `Bearer ${access_token}` } } 一起发送确保访问“承载” token 与请求一起发送。这些可以设置为每个请求或每个请求的默认值,因此这两种语法。
    Github example with Flask and React

    关于内存中的 JWT 访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65545590/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com