由于我已经生成了 JWT access_token 并且它的过期时间为:5d, 但每当我生成新的 JWT access_token 并想要撤销最后一个 access_token 时,我都想让它过期。
如何在nodeJs中做到这一点?
框架挑战:访问令牌应该永远不具有 5 天的生命周期。
JWT 从设计上来说是一个“无状态”权限指示器;它说“在该令牌的有效期内,接收它的服务应该信任持有者以实现其中列出的目的”。这与“会话令牌”形成对比,其中令牌本身只是一个随机标识符,接收它的服务需要在某个中央存储中查找它以找出授予哪些权限。 完全无状态访问令牌的生命周期需要尽可能短——通常最多几分钟。它本质上是一个缓存生命周期,在此期间不会根据中央存储检查用户的权限。
显然,您不想每隔几分钟就询问用户密码,因此您需要一些具有更长生命周期的令牌。这就是“刷新令牌”的用武之地:具有更长生命周期的不同 JWT,但“仅由身份验证服务接受”。 JWT 刷新令牌表示“该令牌的持有者完成了登录过程,并且应该被授权为所识别的用户颁发访问令牌”。
与访问令牌不同,刷新令牌并不是纯粹无状态的:因为它仅被一个服务接受,所以该服务可以维护一个“撤销列表”。当被要求颁发访问令牌时,它首先检查刷新令牌是否已被撤销。 这意味着刷新令牌可以具有更长的生命周期,并且还可以具有“滚动”生命周期:在颁发访问令牌时,您还可以颁发具有延长生命周期的新刷新令牌。生命周期表示用户可以在请求之间暂停多长时间并且仍然保持登录状态。 请注意,撤销喜欢不需要直接列出所有刷新令牌。例如,如果用户注销,它可以记录其用户 ID,并拒绝为该用户颁发新的(短期的)访问令牌。如果他们再次登录,它可以记录时间戳,并且只接受该日期之后创建的刷新令牌。
总结:
访问令牌授权
用户(授予他们访问权限),并且是无状态的设计
。在其存续期间,将被无条件接受
,因此生命周期应