为什么我可以轻松解码 jwt.io 上的 auth0 id_token?
Why can i easily decode auth0 id_token on jwt.io?
好的,我正在开发 Angular 2 应用程序。我已经添加了 auth0 身份验证,但对我来说它处理会话非常不安全。 jwt 令牌未加密并保存在 localStorage 中。这些声明对任何人都是可见的,它们可以很容易地被解码和揭示。更不用说,网络存储本身并不是一个安全的地方。
我选择 JWT,因为稍后我想用电子将这个网络应用程序转换为桌面应用程序,所以我不能使用 cookie 会话。我的用户将有其他信息,例如角色,我不想在每次请求时都在数据库中查找这些信息,这就是为什么我想将它们存储在 jwt 中。加密数据是有意义的,但auth0似乎没有提供该功能。
如果像角色这样的声明不受保护地存储在 localStorage 中,是什么阻止我去 firefox 控制台更改令牌,例如让自己成为管理员?
JWT 令牌有两部分:显式(通过 base64 算法编码)- 带有负载数据,例如 exp 时间或用户 ID 和角色等,以及 implicit - 哈希键以极高的概率保证显式数据的任何部分在令牌创建后没有改变(由服务器使用它的私钥)。所以在 Local/Session 存储中你可以存储这个显式部分。完整的令牌应该存储在 httpOnly cookie 中——这样您就可以免受 XSS 攻击(黑客想要窃取您的令牌)。
因此您可以从 firefox 读取和更改 jwt 令牌负载,但您将无法生成隐式哈希 - 服务器将拒绝您的令牌。
所以标题问题的答案是:因为Auth0 id_token is JWT token :)
If claims like roles are stored in localStorage unprotected, what's stopping me to go to firefox console and change the token, e.g. make myself an admin?
因为JWT 已签名,所以在验证期间将检测到对内容或签名的任何更改
数字签名,像这样的 JWT 令牌的第三部分 hhhhhh.ppppppp.ssssss
是使用服务器私钥创建的,是您验证令牌发行者身份以及它具有的方式未更改
如果您想隐藏负载,JWT 规范允许使用加密(参见 Json Web Encryption-JWE at RFC). If auth0 does not support it, you have a lot of libraries listed in jwt.io
好的,我正在开发 Angular 2 应用程序。我已经添加了 auth0 身份验证,但对我来说它处理会话非常不安全。 jwt 令牌未加密并保存在 localStorage 中。这些声明对任何人都是可见的,它们可以很容易地被解码和揭示。更不用说,网络存储本身并不是一个安全的地方。
我选择 JWT,因为稍后我想用电子将这个网络应用程序转换为桌面应用程序,所以我不能使用 cookie 会话。我的用户将有其他信息,例如角色,我不想在每次请求时都在数据库中查找这些信息,这就是为什么我想将它们存储在 jwt 中。加密数据是有意义的,但auth0似乎没有提供该功能。
如果像角色这样的声明不受保护地存储在 localStorage 中,是什么阻止我去 firefox 控制台更改令牌,例如让自己成为管理员?
JWT 令牌有两部分:显式(通过 base64 算法编码)- 带有负载数据,例如 exp 时间或用户 ID 和角色等,以及 implicit - 哈希键以极高的概率保证显式数据的任何部分在令牌创建后没有改变(由服务器使用它的私钥)。所以在 Local/Session 存储中你可以存储这个显式部分。完整的令牌应该存储在 httpOnly cookie 中——这样您就可以免受 XSS 攻击(黑客想要窃取您的令牌)。
因此您可以从 firefox 读取和更改 jwt 令牌负载,但您将无法生成隐式哈希 - 服务器将拒绝您的令牌。
所以标题问题的答案是:因为Auth0 id_token is JWT token :)
If claims like roles are stored in localStorage unprotected, what's stopping me to go to firefox console and change the token, e.g. make myself an admin?
因为JWT 已签名,所以在验证期间将检测到对内容或签名的任何更改
数字签名,像这样的 JWT 令牌的第三部分 hhhhhh.ppppppp.ssssss
是使用服务器私钥创建的,是您验证令牌发行者身份以及它具有的方式未更改
如果您想隐藏负载,JWT 规范允许使用加密(参见 Json Web Encryption-JWE at RFC). If auth0 does not support it, you have a lot of libraries listed in jwt.io