【问题标题】:Access Tokens: Revoke vs Delete访问令牌:撤销与删除
【发布时间】:2018-05-21 13:04:07
【问题描述】:

我正在使用dusterio/lumen-passport 创建路由/user/logout,并在控制器操作中手动撤销导致用户退出的令牌。

我有两个选项可以注销用户。撤销令牌(将令牌保存在数据库中 - 只需设置一个标志,告知令牌无用)并删除令牌。

我的问题很简单:

管理令牌的最佳方法是什么?我应该通过删除还是撤销来注销?

将来,我将使用 redis 来存储令牌,所以我想我应该删除令牌,因为在 redis 服务器中保留过期数据是没有意义的。

【问题讨论】:

  • 我认为在您的场景中,通过删除令牌,您可以获得与令牌失效相同的结果,但无需在商店内管理无效令牌(无论它是什么)

标签: laravel security oauth-2.0 lumen laravel-passport


【解决方案1】:

1) 撤销/使令牌无效。

2) 每次调用受保护的 API 时,都应检查令牌的有效性,然后仅相应地处理请求。

3) 如果遇到无效令牌,请将用户重定向到登录页面,并在成功验证时发出有效令牌,然后再次将他们重定向到请求的页面。

使用这种方法,即使在同一浏览器的另一个选项卡/窗口中打开了现有会话,并且如果用户在注销/会话超时后尚未登录,这将始终确保使用有效令牌所有时间。

存储过期的令牌绝对没有意义。将 JWT 令牌存储在数据库中也不是正确的做法。它们应该只存储在会话数据中,并在有效性更改时删除/替换。

因此,仅在会话数据中存储单个有效的 JWT 令牌以用于特定目的。假设您的 JWT 令牌颁发者服务器具有最佳实现,请确保您永远不会再获得相同的 JWT 令牌。因此,过期后存储它们绝对没有意义。

【讨论】:

  • 如果您有任何疑问,请随时询问。
  • 在 JWT 中有一个名为“刷新时间”(REFRESH_TTL) 的设置,在我的例子中默认设置为 2 周。这是您可以刷新令牌的时间段。我理解这个问题和你的回答。我个人选择在注销时删除令牌。撤销令牌将它们列入黑名单。
猜你喜欢
  • 2019-04-12
  • 2020-09-29
  • 1970-01-01
  • 2015-03-06
  • 2015-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-11-13
相关资源
最近更新 更多