Authentication 如何使现有JWT令牌过期?

Authentication 如何使现有JWT令牌过期?,authentication,web-applications,oauth,oauth-2.0,jwt,Authentication,Web Applications,Oauth,Oauth 2.0,Jwt,在我的新公司,这是我们的OAuth流程 用户输入用户名和密码 密码服务对其进行身份验证,并调用中央Oauth服务(内部开发) Oauth服务生成一些access_令牌(AT),并将其存储在数据库中,并具有到期时间 下次用户到来时,AT将在cookie中旅行,应用程序将使用来自DB的Oauth服务对其进行验证,并更新到期时间 以DB为单位增加 现在我正计划将其转移到基于JWT的身份验证。根据我在不同教程中的理解,JWT令牌本身包含签名 可以在没有任何存储(缓存或数据库)的情况下进行验证。我的问题是

在我的新公司,这是我们的OAuth流程

  • 用户输入用户名和密码
  • 密码服务对其进行身份验证,并调用中央Oauth服务(内部开发)
  • Oauth服务生成一些access_令牌(AT),并将其存储在数据库中,并具有到期时间
  • 下次用户到来时,AT将在cookie中旅行,应用程序将使用来自DB的Oauth服务对其进行验证,并更新到期时间 以DB为单位增加
  • 现在我正计划将其转移到基于JWT的身份验证。根据我在不同教程中的理解,JWT令牌本身包含签名 可以在没有任何存储(缓存或数据库)的情况下进行验证。我的问题是关于到期时间增量的处理。因为我需要增加会议时间 每次用户来到站点,这意味着我需要生成新的JWT令牌,并使前一个令牌过期。生成新的是一项简单的任务,不知道如何生成 是否可以使现有JWT令牌过期

    我可以将包含用户id和最新JWT令牌的映射保存在缓存中。其余的令牌将被视为无效。但这种基于缓存的方法失败了 JWT令牌的用途,其中不应有任何存储要求

  • JWT的优势在于其内容不能被最终用户或任何攻击者篡改,因为如果他们这样做,验证将失败。因此,JWT的目标不是避免存储

  • 在今天,人们几乎不会丢弃任何数据。JWT也不例外。因此,存储JWT以及所有相关的细节和时间戳有其价值。此外,还有一些性能方面的考虑。此答案将提供这一行的一些详细信息:

  • 使用第二个名为刷新令牌(可以是JWT)的令牌处理递增的到期时间,该令牌通常比访问令牌具有更长的有效性。如果用户在刷新令牌的有效期内返回,则用户不必输入凭据。这在OAuth2 RFC中有详细说明


  • 如果没有回答问题,则可以缓存原始令牌的哈希值,而不是缓存原始令牌(这是不安全的)。