jsonwebtoken:什么是有效负载
jsonwebtoken: what is payload
我想使用 json 网络令牌来验证用户,我即将使用 jwt.sign 方法,但是 "payload" 根据维基百科有效负载定义(在计算中),术语让我感到困惑是:
In computing and telecommunications, the payload is the part of transmitted data that is the actual intended message. Headers and metadata are sent only to enable payload delivery.[1][2]
但根据中码
const jwt = require('jsonwebtoken');
app.post('/api/authenticate', function(req, res) {
const { email, password } = req.body;
User.findOne({ email }, function(err, user) {
if (err) {
console.error(err);
res.status(500)
.json({
error: 'Internal error please try again'
});
} else if (!user) {
res.status(401)
.json({
error: 'Incorrect email or password'
});
} else {
user.isCorrectPassword(password, function(err, same) {
if (err) {
res.status(500)
.json({
error: 'Internal error please try again'
});
} else if (!same) {
res.status(401)
.json({
error: 'Incorrect email or password'
});
} else {
// Issue token
const payload = { email };
const token = jwt.sign(payload, secret, {
expiresIn: '1h'
});
res.cookie('token', token, { httpOnly: true })
.sendStatus(200);
}
});
}
});
});
payload 是用户提供的用于身份验证的电子邮件,这让我感到困惑,如果有人解释什么是 payload 以及 payload 在 jwt.sign()
中的作用,我将很高兴
在 JSON Web Tokens 中,有效负载是一组要包含在正在生成的令牌中的字段; API 需要的东西,比如说,为特定用户获取正确的数据。
它只是一个简单的 JSON 对象,通常用于包含用户标识详细信息,例如用户 ID、帐户 ID 或电子邮件地址。但是,它也可以包含您可能需要的任意数据,例如用户的全名、语言偏好等。
示例负载可能如下所示,假设这些是您的 API 依赖的字段,以获取有关令牌所属的 user/account 的详细信息。请注意,这将被视为相当大的有效载荷;大多数有效负载只有一个用户 ID 字段,因为这通常是端点正确识别用户所需的所有字段。
{
user_id: 303,
account_id: 909,
email: 'joe@example.com',
full_name: 'Joe Blow',
default_language: 'en_US'
}
警告:有效负载未加密,因此请确保您不存储密码、密钥、信用卡号等内容,银行账户余额等。只应存储您在 URL 或 public 密钥中看到的 ID 等标识符。
此外,有效负载会影响令牌的总长度(更多数据意味着更长的令牌),因此您只想包含最重要的数据片段。否则,您将在每个消耗带宽的请求上发送一个非常大的令牌,并且理论上会占用更多服务器资源进行解码。
最后,JWT 是无状态的,这意味着它们不是会话。所以不要包含任何经常更改的数据,例如游戏得分、上次登录等。
我想使用 json 网络令牌来验证用户,我即将使用 jwt.sign 方法,但是 "payload" 根据维基百科有效负载定义(在计算中),术语让我感到困惑是:
In computing and telecommunications, the payload is the part of transmitted data that is the actual intended message. Headers and metadata are sent only to enable payload delivery.[1][2]
但根据中码
const jwt = require('jsonwebtoken');
app.post('/api/authenticate', function(req, res) {
const { email, password } = req.body;
User.findOne({ email }, function(err, user) {
if (err) {
console.error(err);
res.status(500)
.json({
error: 'Internal error please try again'
});
} else if (!user) {
res.status(401)
.json({
error: 'Incorrect email or password'
});
} else {
user.isCorrectPassword(password, function(err, same) {
if (err) {
res.status(500)
.json({
error: 'Internal error please try again'
});
} else if (!same) {
res.status(401)
.json({
error: 'Incorrect email or password'
});
} else {
// Issue token
const payload = { email };
const token = jwt.sign(payload, secret, {
expiresIn: '1h'
});
res.cookie('token', token, { httpOnly: true })
.sendStatus(200);
}
});
}
});
});
payload 是用户提供的用于身份验证的电子邮件,这让我感到困惑,如果有人解释什么是 payload 以及 payload 在 jwt.sign()
中的作用,我将很高兴在 JSON Web Tokens 中,有效负载是一组要包含在正在生成的令牌中的字段; API 需要的东西,比如说,为特定用户获取正确的数据。
它只是一个简单的 JSON 对象,通常用于包含用户标识详细信息,例如用户 ID、帐户 ID 或电子邮件地址。但是,它也可以包含您可能需要的任意数据,例如用户的全名、语言偏好等。
示例负载可能如下所示,假设这些是您的 API 依赖的字段,以获取有关令牌所属的 user/account 的详细信息。请注意,这将被视为相当大的有效载荷;大多数有效负载只有一个用户 ID 字段,因为这通常是端点正确识别用户所需的所有字段。
{
user_id: 303,
account_id: 909,
email: 'joe@example.com',
full_name: 'Joe Blow',
default_language: 'en_US'
}
警告:有效负载未加密,因此请确保您不存储密码、密钥、信用卡号等内容,银行账户余额等。只应存储您在 URL 或 public 密钥中看到的 ID 等标识符。
此外,有效负载会影响令牌的总长度(更多数据意味着更长的令牌),因此您只想包含最重要的数据片段。否则,您将在每个消耗带宽的请求上发送一个非常大的令牌,并且理论上会占用更多服务器资源进行解码。
最后,JWT 是无状态的,这意味着它们不是会话。所以不要包含任何经常更改的数据,例如游戏得分、上次登录等。