繁体   English   中英

JSON网络令牌未存储数据,或者我无法正确访问数据

[英]JSON web token not storing data OR I can't access it correctly

我有一个MEAN堆栈应用程序,该应用程序将用户信息存储在JSON Web令牌内,并且我正在尝试向JSON Web令牌添加值,以供我的应用程序引用。 我认为数据存储在JSON Web令牌中,但是我无法访问它,但是我可能是错的。

这是在服务器端创建JSON Web令牌的位置:

userSchema.methods.generateJwt = function() {
console.log("I'm creating a JSON WebToken");
console.log(this.hasPaid); // HERE I CAN CLEARLY SEE THIS HAS THE VALUE I'M WANTING
var expiry = new Date();
expiry.setDate(expiry.getDate() + 7);
return jwt.sign({
    _id: this._id,
    email: this.email,
    name: this.name,
    hasPaid : this.hasPaid, // HERE IS THE VALUE I WANT
    exp: parseInt(expiry.getTime() / 1000),
}, "MY_SECRET");
};

这是我的AngularJS身份验证服务

var currentUser = function() {
  if(isLoggedIn()){
    var token = getToken();
    var payload = token.split('.')[1];
    payload = $window.atob(payload);
    payload = JSON.parse(payload);
    console.log(payload);
    return {
      email : payload.email,
      name : payload.name,
      hasPaid : payload.hasPaid // Here is my value
    };

  }
};

然后,在我的APP.JS内部尝试调用该函数:

console.log(authentication.currentUser().hasPaid); // This works because when i call currentUser().name

获取令牌功能

var getToken = function () {
  return $window.localStorage['mean-token'];
};

提前致谢!

好 。 在我看来,您将很难尝试解码令牌客户端,而无需使用“ MYSECRET”对其进行解码(这实际上是JWT的“安全”功能)。

令牌只能在最初对其进行签名的服务器之外以任何方式进行验证,更改,验证或操作

编辑 :好的。 我的错。 完全有可能解码PAYLOAD 而无需使用“ SECRET”(实际上是BASE64Encoded,等于零安全性)。 没有秘密就不可能对签名进行解码/验证

无论如何,这就是原因,因为标准建议是不将机密/敏感/机密信息保存在JWT的有效负载上。

将您的用户电子邮件,角色,付款信息保存在此非常安全,因为它可以存储在COOKIES和/或本地存储中。 因此,如果攻击者可以破坏浏览器,则可以轻松获取此数据

一个想法可能会存储一些不允许登录的唯一用户ID,例如一个唯一ID字段,并可能以MDHashed之类的安全形式添加一些声明,例如角色和特权的唯一ID。

所以我对令牌有效负载的建议是:

 var crypto = require('crypto');
 // some more code 
 var userClaims={ hasPaid: this.hasPaid}
 return jwt.sign({
     _id: this._id,
     claims:  crypto.createHash('md5').update(userClaims).digest('hex')
 }, "MY_SECRET")

注意 :忘记我的最后三个评论

我想到了。 我道歉。 如果有人要使用此信息,则我可以正确完成所有操作,以上功能将起作用。 但是,我使用了缩小应用程序,并且使用的是未更新的缩小认证服务。 h! 对不起大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM