【发布时间】:2019-05-02 04:06:14
【问题描述】:
没有找到nodejs相关的疑惑。
我是 nodejs 的新手,我正在使用 JWT 框架来创建用户令牌和会话。我想知道如何防止会话攻击(使用令牌窃取用户会话)以及如何真正保护来自需要身份验证的路由的访问。
目前我的带有身份验证和路由的 JWT 代码是这样的:
JWT
const jwt = require('jsonwebtoken');
module.exports.sign = (userId, expiresInValue) => {
const userToken = jwt.sign({ userId }, process.env.SECRET, {
expiresIn: expiresInValue // EXPIRA EM 5 MINUTO
});
return userToken;
}
module.exports.tokenAuthentication = (req, res, next) => {
console.log(req.body.token)
if(!req.body.token){
res.status(401).send({
authStatus: false,
message: "NO TOKEN PROVIDED."
}).end();
} else {
jwt.verify(req.body.token, process.env.SECRET, (error, decoded) => {
if (error) {
res.status(200).send({
authStatus: false,
message: "FAILED TO AUTHENTICATE TOKEN."
}).end();
} else {
req.body.userId = decoded.userId;
req.body.userToken = req.body.token;
req.body.userTokenExp = "5 min";
next();
}
});
}
}
路线示例
const jwtLibrary = require('../../librarys/others/JWT');
module.exports = (app) => {
app.route('/home/v1/').post(jwtLibrary.tokenAuthentication, (req, res) => {
app.controllers.home.controller.renderHomePage(req, res);
});
}
路由器控制器示例
module.exports.renderHomePage = (req, res) => {
res.render('home/view', {
JWT: {
userId: req.body.userId,
userToken: req.body.userToken,
userTokenExp: req.body.userTokenExp
}
});
}
【问题讨论】:
-
那么保护路由的问题在哪里?