【发布时间】:2018-09-15 18:15:35
【问题描述】:
我正在构建一个应用程序,我想在其中使用 jwt-tokens 进行身份验证。我按照这个网站上的教程:https://stormpath.com/blog/nodejs-jwt-create-verify
问题是当我想使用验证功能时出现此错误: JwtParseError: 签名验证失败。
我不知道我做错了什么。
创建令牌的那一刻,我将它与密钥一起保存在我的数据库中。然后我将此令牌发送到浏览器。浏览器发回这个令牌,那时我在我的数据库中搜索令牌。然后我使用令牌和与它一起存储的密钥进行验证。在那一刻我得到了错误。
构建令牌并存储它时的代码:
let secretkey = Jwt.createKey();
let token = Jwt.getToken(message.id, message.adress, 0);
const mySql = new mysql();
mySql.insertToken(message.id, token, secretkey);
获取令牌并验证时的代码:
mySql.getFromDB(token,(err, result)=>{
let body = result[0];
const Jwt = new jwt();
let secretkey = Buffer.from(body.secretkey, 'base64');
let jwtcheck = Jwt.checkJWT(body.token, secretkey);
//console.log(jwtcheck);
另一个奇怪的事情是当我运行 jwt.io 调试器时。我输入我的令牌,它说验证失败,但是当我点击“秘密 base64 编码”按钮时,它说签名已验证。
请问有人可以帮我吗?
谢谢
更新*
jwt.getToken 的代码:
createKey()
{
this.secretkey = uuid();
return secretkey;
}
createClaims(ssub, iiss, ppermissions)
{
let claims = {
sub: ssub,
iss: iiss,
permissions: ppermissions
};
return claims;
}
createJWT(secretkey, sub, iss, permissions)
{
const jwt = nJwt.create(this.createClaims(sub, iss, permissions), secretkey);
return jwt;
}
getToken(sub, iss, permissions)
{
const jwt = this.createJWT(this.secretkey, sub, iss, permissions);
const token = jwt.compact();
return token;
}
【问题讨论】:
-
.createKey和.getToken不是 njwt 库条目中默认导出的 API 方法。您使用的是 njwt 还是其他一些 jwt 节点库? -
没有我自己的函数,creatkey() 使用 uuid 库生成密钥,getToken 函数使用 nJwt.create 函数
-
你能用
Jwt.getToken的实现来编辑你的问题吗
标签: javascript node.js jwt