在 NodeJS 中使 JWT 令牌无效

Invalidate JWT Token in NodeJS

我遵循此 tutorial 使用 JWT 令牌。 token 过期设置为只有 5 分钟,但是如果我想在使用 1 分钟后使 token 失效怎么办?我希望能够对 /api/logout 进行 API 调用,这应该会删除我的令牌。

我正在使用 Express 和 Node。

从我收集到的信息来看,我的选择似乎是拥有一个存储令牌的令牌数据库。当我想让我的令牌过期时,我会 expire/remove 来自数据库的令牌。

我也看到有人随口说"remove"物理硬盘的tokenspace,但是我想不通token物理存储在什么地方让我删除它。

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

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

在数据库中某处保留无效令牌列表的明显解决方案有点消除了上述好处,因为您必须在每次请求时再次查询数据库。

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

更新:在出示过期令牌后颁发新的访问令牌是一个非常糟糕的主意 - 您应该将过期令牌视为无效令牌,就好像它是伪造的一样。更好的方法是让客户端出示一个 refresh token 来证明用户的身份,然后才颁发新的访问令牌。请注意,验证刷新令牌必须是有状态操作,即。您必须在数据库中某处列出每个用户的所有有效刷新令牌,因为如果刷新令牌被泄露,用户必须有一种使该令牌无效的方法。

1) 只需从客户端移除令牌

2) 创建代币黑名单

3) 尽量缩短令牌到期时间并经常轮换它们

请查看使 JSON Web 令牌失效 Invalidating JSON Web Tokens