身份验证令牌如何用于访问用户数据
How is authentication token used to access user data
我想了解基于令牌的身份验证策略如何使用令牌(例如:JWT)来访问特定于用户的数据。我在搜索结果中看到的所有解释都是用户提供用户名和密码然后创建令牌并在每次后续调用中验证的部分。
假设我有一个包含两个 MongoDB 集合的 Node.JS 服务:Users 和 UserMessages . UserMessages 中的每个条目都包含一个 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();
}
});
}
});
JWT 包含负载。
通常,您将用户的 ID 放入此负载中。你可以把任何你喜欢的东西放在那里,但由于令牌是在每个请求上发送的,所以你希望保持小的有效负载。此外,由于 JWT 是 base-64 编码的,任何人都可以解码令牌并查看有效负载的内容。
但是,因为只有您的服务器知道 JWT 的 "secret",所以没有人可以更改负载或以其他方式创建虚假的 JWT...您的服务器将认为此类令牌无效。
上面的代码似乎在解码有效负载并将其存储在 req
对象上。当它解码 JWT 时,它也会验证签名,因此如果解码成功,您就可以信任负载中的数据。现在您可以使用负载中的用户 ID 来获取您想要的数据。
我想了解基于令牌的身份验证策略如何使用令牌(例如:JWT)来访问特定于用户的数据。我在搜索结果中看到的所有解释都是用户提供用户名和密码然后创建令牌并在每次后续调用中验证的部分。
假设我有一个包含两个 MongoDB 集合的 Node.JS 服务:Users 和 UserMessages . UserMessages 中的每个条目都包含一个 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();
}
});
}
});
JWT 包含负载。
通常,您将用户的 ID 放入此负载中。你可以把任何你喜欢的东西放在那里,但由于令牌是在每个请求上发送的,所以你希望保持小的有效负载。此外,由于 JWT 是 base-64 编码的,任何人都可以解码令牌并查看有效负载的内容。
但是,因为只有您的服务器知道 JWT 的 "secret",所以没有人可以更改负载或以其他方式创建虚假的 JWT...您的服务器将认为此类令牌无效。
上面的代码似乎在解码有效负载并将其存储在 req
对象上。当它解码 JWT 时,它也会验证签名,因此如果解码成功,您就可以信任负载中的数据。现在您可以使用负载中的用户 ID 来获取您想要的数据。