首页 > 解决方案 > 仅将生命周期最长的 JWT 的时间存储到数据库中,而不是整个 JWT

问题描述

有很多关于撤销 JWT 的文章,并且之前已经在这里提出了很多问题。这是当前的情况以及我如何解决它:

用户可以多次登录,以便他们生成任意数量的令牌。登录后,每个令牌都会存储到数据库中。每当用户点击受保护的端点时,所提供的令牌都会得到签名和生命周期的验证。如果一切正确,则数据库检查令牌是否存在于数据库中。这是因为如果用户注销,令牌仍然可能有效。因此,在注销后,每个用户令牌都会从数据库中删除。使用 cron 作业过期的数据库令牌会自动删除。数据库表看起来像

令牌 | 所有者 | expires_at


我正在考虑简化这个过程:

既然您知道您将在注销后从用户那里删除所有令牌,我认为您唯一需要检查的是该用户是否存在任何令牌。

用户数据库表可以有一个session_expires_at列,其中包含从发出的最后一个令牌开始的最大过期时间。该过程将是

仍然可以添加诸如“启用每个设备的单独身份验证”之类的功能。我专注于我想到的最重要的部分......

优点:

缺点:


我认为这可能会简化非企业项目的身份验证过程。你怎么看待这件事?我是不是忘记了什么?

标签: authenticationjwtjwt-auth

解决方案


推荐阅读