【问题标题】:How is authentication token used to access user data身份验证令牌如何用于访问用户数据
【发布时间】:2016-05-10 14:40:55
【问题描述】:

我试图了解基于令牌的身份验证策略如何使用令牌(例如:JWT)来访问特定于用户的数据。我在搜索结果中看到的所有解释都是用户提供用户名和密码,然后在每次后续调用中创建和验证令牌的部分。

假设我有一个带有两个 MongoDB 集合的 Node.JS 服务:UsersUserMessagesUserMessages 中的每个条目都包含一个 UserID 和一个 Message

如果经过身份验证的用户想要查看与该用户相关的所有消息,我如何(以编程方式)知道如何过滤正确的消息? 如何在令牌和用户身份之间建立关联(例如:UserID 或任何其他有助于识别用户的内容),以便在下一步?

我只是想了解这个概念。我在任何地方都找不到在代码中获取用户身份的明确示例。 Example:

apiRoutes.use(function(req, res, next) {
    var token = req.body.token || req.param('token') 
        || req.headers['x-access-token'];

    if (token) {
        jwt.verify(token, app.get('superSecret'), function(err, decoded) {
            if (err) {
                return res.json({ success: false, message: 
                    'Failed to authenticate token.' });
            } else {
                req.decoded = decoded;    
                next();
            }
        });
    }
});

【问题讨论】:

    标签: node.js authentication token jwt


    【解决方案1】:

    JWT 包含一个有效负载。

    通常,您将用户的 ID 放在此有效负载中。你可以把任何你喜欢的东西放在那里,但是由于每次请求都会发送令牌,所以你希望保持有效负载很小。此外,由于 JWT 是 base-64 编码,任何人都可以解码令牌并查看有效负载的内容。

    但是,因为只有您的服务器知道 JWT 的“秘密”,所以没有人可以更改有效负载或以其他方式创建虚假 JWT...您的服务器将认为此类令牌无效。

    上面的代码似乎正在解码有效载荷并将其存储在req 对象中。当它解码 JWT 时,它也在验证签名,因此如果解码成功,您可以信任有效负载中的数据。现在您可以使用负载中的用户 ID 来获取您想要的数据。

    【讨论】:

      猜你喜欢
      • 2020-04-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-04-18
      • 1970-01-01
      • 2019-11-24
      相关资源
      最近更新 更多