如何使现有 JWT 令牌过期?

use*_*603 5 authentication web-applications oauth oauth-2.0 jwt

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

  1. 用户输入用户名和密码。
  2. 密码服务对其进行身份验证并调用中央 Oauth 服务(内部开发)。
  3. Oauth服务生成一些access_token(AT)并将其存储在数据库中并指定到期时间。
  4. 下次用户到来时,AT 会在 cookie 中传输,应用程序会使用 DB 中的 Oauth 服务对其进行验证,并更新到期时间以在 DB 中增加它。

现在我计划将其转移到基于 JWT 的身份验证。根据我对不同教程的理解,JWT 令牌本身包含可以在没有任何存储(缓存或数据库)的情况下进行验证的签名。我的问题是关于到期时间增量的处理。由于每次用户访问站点时我都需要增加会话时间,这意味着我需要生成新的 JWT 令牌并使前一个令牌过期。生成新的 JWT 令牌很容易,不确定如何使现有的 JWT 令牌过期?

我可以将包含 user_id 和最新 JWT 令牌的地图保存在缓存中。其余代币将被视为无效。但这种基于缓存的方法违背了 JWT 令牌的目的,即不应有任何存储需求。

Sap*_*asu -2

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

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

  3. 增加过期时间是使用称为刷新令牌(可以是 JWT)的第二个令牌来处理的,该令牌通常比访问令牌具有更长的有效期。如果用户在刷新令牌的有效期内返回,则用户无需输入凭据。OAuth2 RFC 中有详细说明。