JSON web令牌不存储数据或我不能正确访问它
JSON web token not storing data OR I can't access it correctly
我有一个存储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身份验证服务。咄! !对不起人。
相关文章:
- IOS自动化:有没有办法;刷新'元素树(或者Instruments'认为可以访问和不能访问的任何内容)
- 为什么我的firefox扩展javascript不能访问opener窗口,也看不到window.name
- 为什么这个 javascript 函数不能访问同一类中的变量
- 为什么我可以在javascript中访问asp:TextBox,但不能访问asp:Label
- 用一个页面创建测试,以确定结果(不能访问数据库或php,需要使用javascript/html/等)
- 不能访问数组中的对象,只能访问对象本身
- Rails-Don'不能访问表单中的实例变量
- js在参数中命名了函数,不能访问出函数
- 为什么我不能访问CoffeeScript中的动态内容选择器
- 扩展了类,但不能访问子类的函数
- 为什么不能访问分配jquery对象的函数内部的变量
- IAM允许访问一个dynamoDB方法,但不能访问另一个使用javascript到AWS的方法
- 解析AJAX HTML响应:我可以找到元素,但不能访问它们的innerHTML或值
- 使用带有jquery/javascript的for循环创建动态数组不能访问外部或不能访问全局
- 不能访问正确的对象位置
- 量角器:不能访问父函数定义的闭包中的变量
- 不能访问ng-repeat项目中的ng-click事件
- 如何将参数传递给回调,而不能访问Javascript中的母函数
- React/Javascript,不能访问对象中的字段
- Chrome.storage.local不能访问其他脚本中的数据