好的,我正在开发一个Angular 2应用程序。我已经添加了auth0身份验证,但对我来说它非常不安全地处理会话。 jwt令牌未加密并保存在localStorage中。声明对任何人都可见,它们可以轻松解码和显示。更不用说,Web Storage本身并不安全。
我选择JWT,因为后来我想用电子将这个网络应用程序转换为桌面应用程序,所以我不能使用cookie会话。我的用户将有其他信息,如角色,我不想在每次请求时在db中查找,这就是为什么我想将它们存储在jwt中。加密数据是有意义的,但auth0似乎没有提供这种功能。
如果角色之类的声明存储在localStorage中不受保护,那么什么阻止我去firefox控制台并更改令牌,例如让自己成为管理员?
答案 0 :(得分:5)
如果角色之类的声明存储在localStorage不受保护的情况下,那么阻止我去firefox控制台并更改令牌,例如让自己成为管理员?
因为 JWT已签名,所以在验证过程中会检测到对内容或签名的任何更改
数字签名,像hhhhhh.ppppppp.ssssss
这样的JWT令牌的第三部分是使用服务器私钥创建的,并且是您可以验证令牌发行者身份的方式,也是改变
如果要隐藏有效负载,JWT规范允许使用加密(请参阅RFC处的Json Web Encryption-JWE)。如果auth0不支持它,那么jwt.io
中列出了很多库答案 1 :(得分:0)
JWT令牌有两部分:显式(基于base64算法的编码) - 有效载荷数据,例如exp时间或用户ID和角色等,以及隐式 - 哈希密钥保证在创建令牌之后,显式数据的任何部分都没有变化的极高概率(由服务器使用它的私钥)。因此,在本地/会话存储中,您可以存储此显式部分。完整令牌应存储在httpOnly cookie中 - 然后您将受到保护免受XSS攻击(黑客想要窃取您的令牌)。
因此,您可以从firefox读取和更改jwt令牌有效负载,但是您将无法生成隐式哈希 - 并且服务器将拒绝您的令牌。
所以标题问题的答案是:因为Auth0 id_token is JWT令牌:)