代码之家  ›  专栏  ›  技术社区  ›  quantdaddy

包含userID的JWT是否需要从数据库进行验证?

  •  6
  • quantdaddy  · 技术社区  · 6 年前

    我用userID和iat(issues at)签署了一个JWT(JSON Web Token),如下所示

    jwt.encode({sub: user.id, iat: timestamp}, jwtSecret);
    

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

    我的感觉是,我需要访问数据库来验证每个请求中的用户,这将非常昂贵,并且无法达到使用JWT的目的。

    2 回复  |  直到 6 年前
        1
  •  6
  •   jps    6 年前

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

    • 仅当您信任请求令牌的用户时,才能生成该令牌。
    • 您信任令牌,只要它没有过期,并且可以使用密码进行验证。
        2
  •  3
  •   Alex Michailidis    6 年前

    JWT的整个想法是可以验证其中包含的声明的完整性。如果您能够成功解码该令牌,则可以确保该令牌包含您之前编码的信息。要传递格式错误的数据,还必须知道 secret 您使用来签署令牌。

    有关更多信息,请阅读 this