在NodeJS中使JWT令牌无效

Kou*_*sha 2 token node.js express jwt

我按照本教程使用JWT令牌.令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌失效怎么办?我希望能够进行API调用,/api/logout并且应该删除我的令牌.

我正在使用Express和Node.

似乎从我可以收集的内容来做我的选择是有一个存储令牌的令牌数据库.当我想要使我的令牌过期时,我会从DB中过期/删除令牌.

我也看到人们随便说从物理硬空间"删除"令牌,但我无法弄清楚令牌的物理存储位置,以便我将其删除.

Rob*_*ann 5

JWT令牌身份验证的一般好处是令牌可以包含您通常在会话存储中保留的所有会话信息.这节省了大量资源,特别是在请求响应时间内,因为您不必在每个请求上查找会话数据 - 客户端会为您提供所有这些资源.

但是,它的代价是在您选择的时候无法撤销JWT令牌,因为您失去了状态跟踪.

在数据库中某处保留无效标记列表的明显解决方案会消除上述好处,因为您必须在每次请求时都要查询数据库.

更好的选择是发行短命的JWT令牌,即令牌只有一分钟有效.对于Web应用程序,普通用户可以在一分钟内执行多个请求(用户在您的应用程序中导航).您可以为每个用户提供一个持续一分钟的JWT令牌,当有过期令牌的请求到达时,您只需向他们发出一个新令牌即可.

更新:在显示过期令牌后发出新的访问令牌是一个非常糟糕的主意 - 您应该将过期的令牌视为无效,就像它已被伪造一样.更好的方法是让客户端呈现刷新令牌,该令牌将证明用户的身份,然后才发出新的访问令牌.请注意,验证刷新令牌必须是有状态操作,即.您必须拥有数据库中某个位置的每个用户的所有有效刷新令牌的列表,因为如果刷新令牌受到威胁,则用户必须具有使该令牌无效的方法.