【发布时间】:2019-08-20 16:05:08
【问题描述】:
好吧,这个问题可能很幼稚,因为我是第一次在我的节点应用程序中实现 JWT,我对此有太多疑问。
首先我不清楚iss、sub 和aud 的说法。根据我的基本理解,我知道iss 是令牌的发行者,所以我可以假设它是应用程序的公司名称。 sub 是令牌的主题,或者简单来说可能是用户身份/用户名。最后,aud 是针对观众的,或者简单来说就是 api 服务器 url/资源服务器。请让我知道我是否正确理解了这些条款。
现在,以我有限的知识,我已经设置了基本的 JWT 签名和验证。一个小sn-p如下:
JWT.js
module.exports = {
sign: (payload, options) => {
let signOptions = {
issuer: config.JWT_ISSUER,
subject: options.subject,
audience: config.JWT_AUDIENCE,
expiresIn: "24h",
};
return jwt.sign(payload, config.JWT_SECRET, signOptions);
},
verify: (token, options) => {
let verifyOptions = {
issuer: config.JWT_ISSUER,
subject: options.subject,
audience: config.JWT_AUDIENCE,
expiresIn: "24h",
};
try {
return jwt.verify(token, config.JWT_SECRET, verifyOptions);
}
catch (err){
return false;
}
},
现在代币发行如下:
// Issue JWT token
let userData = {
user_name: user.userName,
client_id: user.clientId
};
const token = jwt.sign({ userData }, { subject: user.userName });
验证如下:
// Verify the token
const authData = jwt.verify(token, { subject: req.body.subject });
主要问题
当我向 api 端点发送请求以进行验证时,如果我在正文中没有主题字段(发出的令牌带有子字段) ,令牌验证成功。但是,如果我在正文中发送带有正确/不正确值的主题字段,它将分别获得成功/禁止。
- 为什么会这样?
- 为什么请求中没有传递子字段时令牌不被禁止?
- 我需要手动验证吗?
【问题讨论】:
标签: javascript node.js authentication jwt express-jwt