【问题标题】:How can i decode in AngularJS a JWT with a public key?如何在 AngularJS 中使用公钥解码 JWT?
【发布时间】:2015-07-02 06:23:36
【问题描述】:

我正在使用基于 JWT 的身份验证构建一个 AngularJS 站点。当我成功登录到应用程序时,后端会返回一个 JWT 并存储在 localStorage 中。

我想在 JWT 声明中接收用户的角色,但我从 localstorage 读取了令牌,因此可以简单地修改(例如:使用 chrome 开发工具),恶意用户可以在 JWT 中放置假角色.

如何使用公钥在客户端验证令牌?我假设 NodeJS 服务器使用 jwt-simple 使用相应的私钥生成令牌

提前致谢!

【问题讨论】:

  • “如何在 AngularJS 中解码”的问题毫无意义。 AngularJS 是一个 MVVM 框架,它不关心加密或验证,或任何其他数据结构。您也没有提及这是 JWS 还是 JWE 令牌 - 前者只需要验证;后者解密。最终,声明的验证取决于发生真正基于角色的访问控制的服务器

标签: javascript angularjs authentication jwt


【解决方案1】:

恶意用户可以在 JWT 中放置假角色

为什么这是一个问题?恶意用户无法在不知道私钥的情况下生成有效令牌,并且服务器将在下一次请求时验证 JWT。

如果您想验证 JWT 以正确显示,例如 GUI,您可以使用 JS 库,例如http://kjur.github.io/jsjws/.

【讨论】:

  • 好的,让我们假设您的客户端应用程序确实获得了一个假令牌,信任它并尝试执行一些高权限操作。应用程序将使用虚假令牌向服务器发送请求,并且它将失败。所以“黑客”唯一能做到的就是让应用看起来看起来可以做很多事情,而实际上它不会。
  • 你又是对的。事实上,服务器没有响应是因为令牌无效。我只想在客户端验证令牌以避免“黑客”到达应用程序的敏感区域。
  • 这很好,您可以使用答案中提到的库,它具有简单的API并支持多种算法。但请记住,验证不会阻止流氓用户查看应用程序的敏感 UI 区域(只需在浏览器控制台中编辑实时源代码)-除非您也准备好使用令牌保护静态内容-其中案例客户端验证也无关紧要。
  • 有了“jsjws”,我可以在客户端验证签名的令牌。谢谢老哥!
  • 不客气。如果您认为它足够好,请考虑接受答案。
猜你喜欢
  • 2016-06-14
  • 2018-06-26
  • 2020-08-23
  • 1970-01-01
  • 2022-01-08
  • 2017-08-31
  • 2018-11-14
  • 1970-01-01
  • 2015-08-07
相关资源
最近更新 更多