我使用userID和iat(问题)签署JWT(JSON Web令牌),如此
jwt.encode({sub: user.id, iat: timestamp}, jwtSecret);
当我从客户端收到JWT时,我将其解码以提取用户ID。每次我需要允许用户访问安全路由时,是否需要通过检查数据库中是否存在来验证userID(请参阅第一个example)?或者我可以假设用户是她说的那样,并允许她访问安全路径?
我的感觉是我需要访问数据库以在每个请求上验证用户,这将是昂贵的并且无法使用JWT。
答案 0 :(得分:4)
您的令牌已签名。如果有人在客户端更改令牌,则验证失败,服务器端框架将拒绝验证。因此,您可以信任您的令牌。 当然,jwtSecret应该只是您的身份验证服务器和资源服务器所知道的秘密。
答案 1 :(得分:2)
JWT的整个想法是可以验证其中包含的声明的完整性。如果您可以成功解码令牌,则可以确保此令牌包含以前由您编码的信息。对于传递格式错误的数据的人,还必须知道用于签署令牌的secret
。
有关详细信息,请参阅this。