JSON web令牌不存储数据或我不能正确访问它

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

本文关键字:不能 访问 令牌 web 存储 数据 JSON      更新时间:2023-09-26

我有一个存储JSON Web令牌内部用户信息的MEAN堆栈应用程序,我正试图为JSON Web令牌添加一个值,以供我的应用程序参考。我相信数据被存储在JSON web令牌,我只是无法访问它,但我可能是错的。

这里是创建JSON web Token的地方服务器端:

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的一个"安全"特性),您将很难尝试解码令牌客户端。

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

EDIT: OK。我的错误。完全有可能解码PAYLOAD。没有"SECRET"(实际上是BASE64Encoded,等于零安全性)。没有秘密就无法解码/验证签名

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

保存在那里你的用户的电子邮件,角色,支付信息,这是一个非常高的安全风险,因为它可以被存储在cookie和/或本地存储。所以如果攻击者能攻破浏览器,就能轻易获得这些数据

一个想法可以停止存储一些不允许的用户的唯一id例如,login,一个唯一的ID字段,并可能添加一些声明,如角色和/或特权的唯一ID,以某种安全的形式,如MDHashed。

所以我对你的令牌有效载荷的建议是:
 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")

注释:忘记我最后的三个注释

我明白了。我道歉。如果有人想使用这些信息,我正在做正确的一切,上述功能将起作用。但是,我使用了一个miniify应用程序,它使用了我没有更新的miniify身份验证服务。咄! !对不起人。