【问题标题】:Handling UI frontend permissions with API backend使用 API 后端处理 UI 前端权限
【发布时间】:2019-08-09 08:28:05
【问题描述】:

我想就权限系统架构征求您的意见。 我将 Web UI 作为单独的前端项目,将 API 作为后端。

API 方面的权限为每个控制器/操作定义为符合数字的某个枚举,当我想创建某个角色时 - 我分配一组代表权限的枚举数字并将它们放入 JWT 令牌中.稍后,授权客户端在标头(承载令牌)中发送 JWT 令牌,并且当 API 将调用某些操作时 - 它检查 JWT 令牌是否包含标记此控制器/操作的枚举值(数字)。在这一边,它很容易工作。这里的好处是,在授权期间,我们只是根据角色从数据库中获取一组“数字”,并在访问本身期间过滤访问 - 所以它工作得很快。

我正在考虑以下 UI 逻辑 - 用户在 UI 端填写登录名/密码。 UI 向 API 发送凭据,API 对用户进行身份验证,收集权限子集 + 一些附加数据并将其加密为 JWT 令牌 - UI 获取此令牌并将其封装在发送给客户端的 cookie 中(可能是 + 一些自己的信息)。因此,每次客户端访问任何 UI 页面时,它都会向 UI 发送 cookie,并且 UI 从 cookie 中获取 JWT 令牌发出 API 请求。

但是,在这种情况下,JWT 令牌是加密的,UI 无法知道里面的数据。而且,即使它可以看到数据 - 它也不会提供任何信息,并且知道 API 端的动态角色集不会为 UI 端提供任何信息。以及仅在 API 端实时转换为权限的编码“数字”。

问题是 webUI 应该如何知道它是否应该为某个用户呈现对管理页面的访问权限。或显示其他 UI 选项等。

我认为这个问题可能是微不足道的,因为很多系统都被拆分为 UI + 后端。但是无论如何,我还没有找到任何好的设计解释。

希望在这里得到社区的建议。感谢您的想法。

【问题讨论】:

    标签: api user-interface architecture permissions frontend


    【解决方案1】:

    @Oleksii,你的假设是正确的,当用户登录时,UI 不会知道细节。因此,它将凭据发送到对其进行身份验证的 API,并且角色和信息的信息将由 API 共享到 UI,基于角色隔离,如果必须是管理员或普通用户,UI 将呈现页面。现在这可以在同一个 api 或单独的 api 中,一旦通过身份验证即可获取角色详细信息。

    【讨论】:

    • 感谢您的回答。但是根据这种情况,API 应该在 API 端分配 UI 角色吗?但是,如果有更多的 UI 应用程序——如 Web、移动、桌面——在这种情况下,API 应该发送有关该 UI 可以做什么的确切信息。这意味着更高的耦合。而且如果不修改 API 就不可能创建新的 UI 应用程序(如果我们希望 UI 能够根据角色动态处理访问)。
    【解决方案2】:

    我终于想出了解决方案。 API 应支持外部应用程序注册。之后,外部应用程序将其支持的所有操作(列表)发送到 API。 API 存储该列表。 当我们需要在 UI 中为最终用户分配一些权限时 - 我们会为 API 角色分配一些特定的操作。

    所以 - 我们有一个单一的权限处理点,检索到的列表与 API 权限一样抽象。

    结果: 用户 -> 向 UI 发送身份验证信息 -> UI 将其重新发送到 API -> API 问题并使用自己的权限加密 JWT 并返回请求外部应用程序 (UI) 的权限列表 -> UI 将权限封装到 cookie 之后可以看到当用户访问 UI 时用户有权获得什么

    【讨论】:

      猜你喜欢
      • 2018-02-06
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2020-01-01
      相关资源
      最近更新 更多