我是Node js的新手。我正在构建一个简单的笔记记录应用程序,并希望使用JWT令牌进行身份验证并保护我的API。在研究中,我知道我需要创建两个令牌:
我的配置文件
class-2
中间件代码
"secret": "*************",
"refreshTokenSecret": "*************",
"port": 5000,
"tokenLife": 900,
"refreshTokenLife": 86400
这是回应
访问令牌可以保存在本地存储中。但文章称将刷新令牌另存为仅HTTP cookie。 我需要以下几点的答案(请记住,我只是一个初学者):
答案 0 :(得分:1)
您可以通过以下方式使用仅HTTP的Cookie:
public authenticateUser(user: User, res: Response) {
const authJwtToken = this.generateJWT({
email: user.email,
uuid: user.uuid
});
const cookieOptions = {
maxAge: 3600000,
secure: true,
httpOnly: true
};
res.cookie('access_token', authJwtToken, cookieOptions);
}
// you can then res.send({...}) or wtv
并不是没有什么可以阻止您存储多个cookie,所以我看不出为什么不以相同的方式存储两个cookie的原因。
现在是否将其存储在数据库中取决于要实现的目标。 通常,这不是必需的,但请注意,在这种情况下,服务器无法以任何方式使单个JWT无效。 (理论上,您可以更改签名密钥,但这会使所有密钥失效。)
如果要实现诸如“从所有设备注销”之类的功能,则需要将为每个用户发出的JWT存储在数据库中(最好是内存中的Redis或Redis)。并再次检查是否已使它们无效的额外信息-即使通常使用会话而不是JWT来实现这种功能
答案 1 :(得分:0)
请参阅此示例,我如何将我的 getByRefId API保护在nodjs中:
在路线文件中:
router.get("/refId/:refId", helper.auth, groupController.getByRefId);
helper.auth is function :
auth: (req, res, next) => {
var token = req.body.token || req.headers['authorization'] || req.headers['Authorization'];
if (token.startsWith('Bearer ')) {
// Remove Bearer from string
token = token.slice(7, token.length).trimLeft();
}
if (token) {
jwt.verify(token, 'MY_SECRET', function (err, decoded) {
if (err) {
console.error('JWT Verification Error', err);
return res.status(403).send(err);
} else {
req.payload = decoded;
return next();
}
});
} else {
res.status(403).send('Token not provided');
}
}
此使用 jwt = require('jsonwebtoken')库,您可以将其安装在nodejs项目中