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

时间:2018-04-17 06:01:48

标签: node.js authentication jwt jwt-simple

我使用userID和iat(问题)签署JWT(JSON Web令牌),如此

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

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

我的感觉是我需要访问数据库以在每个请求上验证用户,这将是昂贵的并且无法使用JWT。

2 个答案:

答案 0 :(得分:4)

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

  • 只有在您信任请求它的用户时才会生成令牌。
  • 您可以信任该令牌,只要该令牌未过期且可以使用该秘密进行验证。

答案 1 :(得分:2)

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

有关详细信息,请参阅this