gpt4 book ai didi

session - 使客户端 JWT session 无效

转载 作者:行者123 更新时间:2023-12-04 00:49:31 25 4
gpt4 key购买 nike

我已经阅读了很多关于 JWT 以及如何通过 JWT 创建“无状态” session 的内容。我理解的要点是,由于签名和过期,您基本上可以发送整个 session 以由客户端保存,而服务器不必维护数据库来记住 session 。

我不明白的是,如果您的用户需要注销,或者您需要在到期前使​​ session 无效,会发生什么?

从技术上讲,您可以指示浏览器从客户端将其删除,但您不能确定这是否真的发生了。 token 本身在技术上仍然有效,如果您没有遵循删除说明,它仍然可以使用。

这种理解正确吗?如果是这样,这不是客户端 session 管理的一个巨大错误吗?除了让服务器存储 session 或缩短到期时间之外,还有什么方法可以克服这个问题?

最佳答案

在到期时间之前使 JWT token 失效有几个原因:帐户删除/阻止/暂停、密码更改、权限更改、用户由管理员注销。所以你的问题是关于主题的

根据您的用例,有几种技术可以应用或组合

1) 删除客户端 token 从本地存储

2) token 黑名单:存储在注销和过期时间之间的 token ,标记过期并在每个请求中检查它。使用唯一标识符 jti或包括上次登录日期并在 iat 发布删除旧 token

它是需要的服务器存储。如果您不希望撤销太多 token ,您也可以使用内存中的黑名单。您只需在更新用户和currentTime - maxExpiryTime < lastLoginDate (iat)‌的关键数据后设置一个条目​.在 currentTime - maxExpiryTime > lastModified 时可以丢弃该条目(不再发送未过期的 token )。在这种情况下不需要存储整个 token 。只需 sub , iat也许jti
3)到期时间短并轮换。 每隔几个请求发出一个新的访问 token 。使用refresh tokens允许您的应用程序获得新的访问 token ,而无需重新验证并与 sliding-sessions 结合使用

滑动 session 是在一段时间不活动后过期的 session 。当用户执行操作时,会发出一个新的访问 token 。如果用户使用过期的访问 token ,则认为 session 处于非事件状态并且需要新的访问 token 。可以使用刷新 token 或需要凭据来获取此新 token

其他常用技术

  • 如果帐户因新用户和密码登录而受到威胁,则允许更改用户唯一 ID
  • 要在用户更改密码时使 token 无效,请使用密码哈希对 token 进行签名。如果密码更改,任何以前的 token 都会自动验证失败。将此机制扩展到其他感兴趣的领域以进行签名。缺点是需要访问数据库
  • 更改签名算法以撤销重大安全问题中的所有当前 token

  • 看看 Invalidating JSON Web Tokens

    关于session - 使客户端 JWT session 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37507714/

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