JWT nodejs / express - 无效签名
Posted
技术标签:
【中文标题】JWT nodejs / express - 无效签名【英文标题】:JWT nodejs / express - Invalid signature 【发布时间】:2019-08-04 08:31:59 【问题描述】:我在使用 Jwt 时遇到问题,尤其是“无效签名”错误。
我在用户登录后生成一个令牌(jsonwebtoken)。
userSchema.methods.generateJwt = function()
var expiry = new Date();
//expiry.setDate(expiry.getDate() + 7);
expiry.setDate(expiry.getDate() + 2);
return jwt.sign(
_id: this._id,
username: this.username,
name: this.lastname,
exp: parseInt(expiry.getTime() / 1000),
, process.env.SRCT,
algorithm: 'HS256'
);
然后我正在创建一个 express-jwt 中间件以将其添加到路由:
var auth = jwt(
secret: process.env.SRCT,
userProperty: 'payload'
);
这样使用:
router.get('/', auth, ctrlUser.slash);
根据调试器,我创建的 JWT 在前端请求(授权承载)中传递,与登录后立即创建的相同。
但不幸的是,在每次向 nodejs 后端请求之后,我仍然遇到错误 "message":"UnauthorizedError: invalid signature"。
有人能告诉我我做错了什么导致签名无效吗?
提前致谢
【问题讨论】:
【参考方案1】:您的验证功能在哪里?您需要检查对受保护区域的每个请求是否确实有效,jwt 提供了一个函数 verify 来做到这一点。
【讨论】:
【参考方案2】:您似乎没有解析令牌的请求标头,也没有为此使用 JWT 库的 verify()
函数。你的 auth 中间件应该是这样的
module.exports = (req, res, next) =>
try
//parse the token from Authorization header (value of "bearer <token>")
let token = req.headers.authorization.split(" ")[1];
//verify the token against your secret key to parse the payload
const tokenData = jwt.verify(token, process.env.JWT_SECRET_KEY);
//add the data to the request body if you wish
req.user = tokenData;
next();
catch (err)
res.status(401).json(
message: "Unauthorized access error!",
);
;
【讨论】:
以上是关于JWT nodejs / express - 无效签名的主要内容,如果未能解决你的问题,请参考以下文章
在nodejs,express和jwt中为相同的路由添加多个授权
Nodejs Express 用于 Web 应用程序 JWT,带有数据库或会话以验证用户身份
NodeJs Express passport-jwt 从令牌中获取错误的用户