包含用户 ID 的 JWT 需要从数据库验证吗?

qua*_*ddy 6 authentication node.js jwt jwt-simple

我使用 userID 和 iat(issues at)签署 JWT(JSON Web 令牌),如下所示

jwt.encode({sub: user.id, iat: timestamp}, jwtSecret);
Run Code Online (Sandbox Code Playgroud)

当我从客户端收到 JWT 时,我对其进行解码以提取用户 ID。每次我需要允许用户访问安全路由时,我是否需要通过检查它在数据库中的存在来验证用户 ID(参见第一个示例)?或者我可以假设用户就是她所说的那个人,并允许她访问安全路径?

我的感觉是我需要访问数据库来验证每个请求的用户,这会很昂贵并且违背了使用 JWT 的目的。

jps*_*jps 6

您的令牌已签名。如果有人在客户端更改令牌,则验证将失败,服务器端框架将拒绝它。因此,您可以信任您的代币。当然,jwtSecret 应该是只有你的认证服务器和资源服务器知道的秘密。

  • 仅当您信任请求它的用户时,才生成令牌。
  • 只要令牌未过期并且可以使用密钥进行验证,您就信任它。