【问题标题】:Should I verify a JWT token information from a Database?我应该从数据库验证 JWT 令牌信息吗?
【发布时间】:2018-12-29 14:35:59
【问题描述】:

我目前正在尝试使用 express、node 和 MongoDB 构建一个 REST API。现在进行身份验证,我使用的是 JWT。

这是检查 JWT 令牌的代码

 const token = req.headers['authorization'];
 if (token){
    const tokens = token.split(' ');
    const key = tokens[1];
    jwt.verify(key, config.jwtKey, (err, authData) => {
        if (err){
            res.status(403).json({
                success: false,
                message: "Authentication2 failed"
            });
        }
        // User authenticated 
        // Do something
        next();
    });
  } else {
    res.status(403).json({
        success: false,
        message: "Authentication failed"
    });
}

现在,这段代码运行良好。

为了制作 JWT,这里是代码

........
........
const token = jwt.sign(
{
   email: user[0]._email,
   userId: user[0]._id
}, config.jwtKey,{ expiresIn: "1d" });
........
........

现在我的问题是我是否也应该通过检查数据库中用户信息的存在来验证用户以使其更安全?

例如,在我的数据库中搜索emailuserId

我在这个项目中使用 node、express、MongoDB、Mongoose 和 JWT。

【问题讨论】:

    标签: node.js mongodb authentication jwt


    【解决方案1】:

    使用令牌的好处是服务器可以 无需调用外部数据存储(如 MongoDB)即可快速验证它。

    但是,如果您要将业务登录添加到您的 API 身份验证中,例如已撤销令牌的黑名单/白名单,那么您必须使用商店来验证令牌和用户详细信息,(比不进行远程操作要慢调用每个令牌,但您必须以低延迟进行)。

    对于低延迟,您必须使用 Redis 之类的数据库,Dynamodb 可能会更好且更安全,而您的数据库和 API 服务器之间没有大的延迟。

    不需要和DB验证签名,可以选择JWT算法

    【讨论】:

    • 目前,我没有任何计划添加任何黑名单/白名单功能。我的问题是,如果我使用安全密钥成功解码了令牌,这意味着令牌有效吗?我不需要通过查询数据库来验证它
    • 会更安全,不会在用户之间转移token。但不是必需的
    【解决方案2】:

    使用所选算法验证(签名)令牌足以确保该用户存在(或存在)在系统上,因为首先生成令牌的是系统。

    但在某些情况下这还不够,例如 Roy G 的回答中提到的黑名单,或者用户的声明已更改或从系统中完全删除但他们仍在使用旧令牌(尚未过期),他们仍然可以访问系统,因此检查 DB 将阻止该访问。

    结合刷新令牌设置较短的到期日期通常是防止此类泄漏的好习惯。

    【讨论】:

      【解决方案3】:

      这是一个老问题,但我想留下一个答案: 是的!每次您的客户端发出 api 请求时,后端都应验证令牌的有效性和后端某处的存在(例如 db 表)。 始终考虑最危险的情况:银行账户 如果有人偷了你的设备怎么办? 您应该能够从另一台设备使令牌无效并更改密码。

      【讨论】:

        猜你喜欢
        • 2017-11-26
        • 1970-01-01
        • 2016-09-13
        • 2017-07-31
        • 2019-06-23
        • 2019-01-16
        • 2017-07-27
        • 2019-10-20
        • 2016-01-17
        相关资源
        最近更新 更多