【发布时间】:2016-10-21 16:33:12
【问题描述】:
假设用户从不同设备多次登录,然后他们决定退出设备a,我们无法删除 JWT 是提供给那个设备的吧?
这是我已经实现的,我不确定其他网站是否这样做,或者这是一种体面的方式。
- 用户登录
- 我创建了一个 redis 会话令牌,它具有与之关联的 userId + 设备名称
- 我将此 redis 令牌存储为 JWT 的主题
- 我将 JWT 传回。
现在用户有了 JWT,他们现在可以访问安全的 api 端点。假设用户想要删除此 会话,这就是我所做的。
- 用户获取特定 userId 的 * redis 会话令牌(当然,他们需要有效的 jwt 来获取此数据)
- 他们选择要销毁的 redis 会话令牌。
- 他们将该令牌发送到
/destroy/{token}端点 - 使用该令牌作为主题的 jwt 将不再起作用。
这样做意味着对于每个请求,我都必须反编译 jwt,获取 redis 令牌,然后查看它是否仍然存在。我想这对于使用 redis 或任何其他内存数据库来说并不昂贵。
这是一种可靠/有效的方法吗?有没有更好/更简单的方法来做到这一点?
【问题讨论】:
-
通过此设置,您是完全使用刷新令牌还是仅使用 JWT 访问令牌?