访问令牌:撤销与删除

Dep*_*man 15 security oauth-2.0 laravel lumen laravel-passport

我正在创建一个路由/user/logout使用dusterio/lumen-passport和在控制器操作中我手动撤销令牌,导致用户被注销.

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

我的问题很简单:

管理令牌的最佳方法是什么?我应该通过删除或撤销来退出吗?

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

Ani*_*rgi 8

1)撤销/使令牌无效.

2)每次调用受保护的API时,都应检查令牌有效性,然后才相应地提供请求.

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

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

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

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

  • 在JWT中,有一个称为“刷新时间”(REFRESH_TTL)的设置,在我的情况下,默认设置为2周。这是您可以刷新令牌的时期。我了解这个问题和您的答案。我个人选择注销后删除令牌。吊销令牌将其列入黑名单。 (2认同)