【问题标题】:Role Based Navigation Display on the Frontend前端基于角色的导航显示
【发布时间】:2017-01-18 23:01:27
【问题描述】:

我有一个由 Spring Boot 提供的 REST API,我正在使用我在后端服务器上生成的 JWT 令牌,并将令牌提供给基于 AngularJS 和 HTML5 的前端应用程序。我现在想根据登录用户的角色控制导航的显示。

问题是:

  1. 如何在前端将带有令牌的新登录用户标识为管理员,以便我可以显示导航链接 A、B 和 C 等...?我的 AngularJS 前端应该解包令牌吗?

  2. 当非管理员用户登录时,我只能显示导航链接 A 和 B。

我怎么能这样做?有什么建议吗?

【问题讨论】:

    标签: angularjs jwt


    【解决方案1】:

    我的 AngularJS 前端应该解压令牌吗?

    是的,如果您想依赖令牌中的数据,请使用它,这是 JWT 的好处之一。

    在您的令牌上放置admin 或类似声明,然后使用它。不要担心“安全性”和令牌无效,因为您使用的是 Angular,无论如何都可以通过开发人员工具或类似工具轻松访问您的所有视图和逻辑,而您的“真正”安全性是通过检查令牌上的无论如何都是服务器端。

    您可以在 AngularJS 应用程序中使用 angular-jwt 模块进行简单的 JWT 处理。

    【讨论】:

    • 前端如何解包令牌?令牌由后端服务器加密和签名。我的前端是否应该知道加密方法,以便它可以解压缩 JWT 令牌以从中获取角色信息?
    • 这个 JWT 令牌如何防止篡改。中间的人可以拦截我的请求,更改信息,前端可以完全相信这个令牌,在这种情况下这可能是错误的。例如,我可以在 JWT 令牌中拥有一个名为角色的字段,该字段是非管理员的,但这种中间人攻击将其更改为管理员。那么如何防范此类攻击呢?
    • @sparkr JWT 令牌可以加密,但除非您在其中保留有意义的数据(您不应该这样做),否则不需要加密。如果中间有人可以拦截您的请求并更改令牌数据,那么您的问题要比“认为”您是管理员的 UI 大得多。阅读 JWT 令牌以了解它们是如何工作的(也许您甚至没有一个真实的用例来证明它们是合理的,而常规会话令牌会更合适)。就像我在答案中所写的那样-考虑到除非您的 Angular 应用程序部分由服务器呈现-您所有的应用程序逻辑都在您的客户端...
    • @sparkr 并且因为整个应用程序都在客户端(html 视图、js 文件等) - 你基本上“不关心”有人弄乱你的 UI,因为每个人都可以......你必须验证服务器上的令牌。如果某人将成为客户端上的“管理员” - 他可能会看到管理员的导航部分,但如果他会尝试访问用户,那么您的 API 调用不应返回用户,因为令牌无效。
    • 流程是这样的。用户使用用户名和密码登录,请求被发送到我验证用户名和密码的服务器。成功验证后,我知道该用户具有什么角色。然后我生成一个 JWT 令牌,将用户名和角色放在声明部分。我将其发送到 UI。 UI 可以解包声明并相应地呈现导航。假设我有人在这个令牌登陆客户端之前篡改了这个令牌,那么当客户端在后续请求时将此令牌发送回服务器时,你的意思是说 JWT 令牌验证将在服务器上失败?
    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2017-01-05
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多