gpt4 book ai didi

session - 阻止特定用户 JWT token ?

转载 作者:IT王子 更新时间:2023-10-29 06:05:19 25 4
gpt4 key购买 nike

假设用户从不同设备多次登录,然后他们决定退出设备 a,我们无法删除 JWT 是提供给该设备的吗?

这是我实现的方法,我不确定其他网站是否也是这样做的,或者这是否是一种不错的方法。

  1. 用户登录
  2. 我创建了一个 redis session token ,它具有关联的用户 ID + 设备名称
  3. 我将此 redis token 存储为 JWT
  4. 的主题
  5. 我传回JWT

现在用户有了 JWT,他们现在可以访问安全的 api 端点。假设用户想要删除此 session ,这是我所做的。

  1. 用户获取特定 userId 的 * redis session token (当然他们需要一个有效的 jwt 来获取此数据)
  2. 他们选择要销毁的 redis session token 。
  3. 他们将该 token 发送到 /destroy/{token} 端点
  4. 使用该标记作为主题的 jwt 将不再有效。

这样做意味着在每次请求时,我都必须反编译 jwt,获取 redis token ,然后查看它是否仍然存在。我想使用 Redis 或任何其他内存数据库并不昂贵。

这是一种可靠/有效的方法吗?有没有更好/更简单的方法来做到这一点?

最佳答案

在几个应用程序中实现 JWT 身份验证/授权时,我也遇到了同样的问题,并达成了相同的解决方案(如果不是非常相似的话):

在我的例子中,我会将 JWT + UserID + DeviceName 存储在数据库中,然后我会有一个 HTTP 请求DELETE/logout/DeviceName 带有 header Authorization: JWTGoesHere

这给了我两个好处:

  • 我现在可以使用有效的 JWT 从任何设备注销用户(它不需要完全相同的 JWT,它只需要是那个用户的 JWT)。
  • 使“注销除此以外的所有 session ”成为可能。

就速度而言,我们开发的应用程序每秒可接收数百个请求。超过 90% 的这些请求需要授权,这意味着检查 JWT 在语法上是否有效,检查是否存在于数据库中,最后但同样重要的是检查它是否已过期。

所有这些检查(使用 Redis 作为数据库)耗时不到 10 毫秒。

底线是:对它进行基准测试,如果它不需要很长时间,那么它就不需要任何优化。

希望对您有所帮助!

关于session - 阻止特定用户 JWT token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37922193/

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