簡體   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