【问题标题】:What is the best way to communicate authorization between a client and REST API?在客户端和 REST API 之间传达授权的最佳方式是什么?
【发布时间】:2018-06-15 18:53:36
【问题描述】:

我正在开发一个应用程序,它将使用 AngularJS 作为前端,与后端的 REST 服务通信,实现为 J2EE/Spring。后端服务通过基于角色的授权得到保护。

在应用程序的前端,我希望 UI 只允许用户执行他们被授权的操作。代码应根据用户的权限显示/隐藏元素。

例如,有一个功能可以列出系统的用户。如果您拥有 admin_users 权限,您可以编辑任何用户的信息,包括他们的角色。如果不这样做,服务器将不允许更新操作。 UI 应通过禁用或隐藏编辑按钮来反映这一点。

从后端向前端传达用户授权的最佳方式是什么?例如,我可以提供一个额外的服务来返回当前用户的权限。

【问题讨论】:

    标签: angularjs spring rest authorization roles


    【解决方案1】:

    我建议您查看(Json Web Token)JWT。它将提供一个随机的复杂密钥(JWT Secret),使暴力破解令牌变得非常困难。

    访问https://jwt.io了解更多信息。

    【讨论】:

    • JWT 将允许我处理身份验证部分,我计划使用它或类似 SAML 令牌之类的东西。这个问题与授权有关。我希望 UI 端的代码知道当前登录用户拥有的权限,以便它可以调整 UI 以禁用当前用户无权使用的任何功能。服务器知道这些权限,不会允许未经授权的操作。
    • 优秀的文章。谢谢你。其中一个建议是混合方法,您可以使用安全 cookie 提供 JWT 进行身份验证,并使用特定端点(例如 /user/current)来提供授权信息。正如他们所指出的,您需要使用这种方法来防范 CSRF 攻击
    【解决方案2】:

    您可以在服务器上实现OPTIONS 处理程序,它返回当前资源和当前登录用户的允许方法列表。例如,假设您有以下 API:

    获取用户:GET /user/1

    修改用户:PATCH /user/1

    作为管理员

    请求:OPTIONS /user/1

    回复:Allow: GET, PATCH

    作为用户

    请求:OPTIONS /user/1

    回复:Allow: GET

    然后您可以在客户端应用程序中推断选项响应的含义并相应地显示/隐藏操作。

    资源:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-28
      • 2021-05-12
      • 2018-09-06
      • 1970-01-01
      • 2015-05-04
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多