我使用此tutorial来使用JWT令牌。令牌到期时间设置为仅5分钟,但如果我想在使用1分钟后使令牌失效怎么办?我希望能够对/api/logout
进行API调用,并且应该删除我的令牌。
我正在使用Express和Node。
似乎从我可以收集的内容来做我的选择是有一个存储令牌的令牌数据库。当我想要使我的令牌过期时,我会从DB中过期/删除令牌。
我也看到人们随便说从物理硬盘空间“删除”令牌,但我无法弄清楚令牌的物理存储位置,以便我将其删除。
答案 0 :(得分:5)
JWT令牌身份验证的一般好处是令牌可以包含您通常会在会话存储中保留的所有会话信息。这节省了大量资源,尤其是在请求响应时间内,因为您不必在每个请求上查找会话数据 - 客户端会为您提供所有这些资源。
但是,这是以您在选择时无法撤销JWT令牌为代价的,因为您失去了状态跟踪。
在数据库中某处保留无效令牌列表的明显解决方案可以消除上述好处,因为您必须在每次请求时都查询数据库。
更好的选择是发布短期JWT令牌,即令牌只有一分钟有效。对于Web应用程序,普通用户可以在一分钟内执行多个请求(用户在您的应用程序中导航)。您可以为每个用户提供一个持续一分钟的JWT令牌,当有过期令牌的请求到达时,您只需向他们发出一个新请求。
更新:在提交过期令牌后发出新的访问令牌是一个非常糟糕的主意 - 您应该将过期的令牌视为无效,就像它已被伪造一样。更好的方法是让客户端呈现refresh token,这将证明用户的身份,然后才发布新的访问令牌。请注意,验证刷新令牌必须是有状态操作,即。您必须在数据库中的某个位置拥有每个用户的所有有效刷新令牌的列表,因为如果刷新令牌被泄露,则用户必须具有使该令牌无效的方法。
答案 1 :(得分:0)