Ole*_*sii 10 architecture api permissions user-interface frontend
我想请教一下您关于权限系统架构的建议。\n我将 Web UI 作为单独的前端项目,将 API 作为后端。
\n\n在 API 端,权限被为每个控制器/操作定义为符合数字的某个枚举,当我想创建某个角色时 - 我分配代表权限的一组枚举数字并将它们放入 JWT 令牌中。稍后,授权客户端在标头(承载令牌)中发送 JWT 令牌,并且当 API 将调用特定操作时,它会检查 JWT 令牌是否包含此控制器/操作标记的枚举值(数字)。这方面很容易并且有效。这里的好处是,在授权期间,我们只需根据角色从数据库中获取 \xe2\x80\x98numbers\xe2\x80\x99 的集合,并在访问本身期间过滤访问 - 因此它工作得很快。
\n\n我正在考虑 UI 逻辑如下 - 用户在 UI 端填写登录名/密码。UI 向 API 发送凭证,API 对用户进行身份验证,收集权限子集 + 一些附加数据并将其加密为 JWT 令牌 - UI 获取此令牌并将其封装在发送给客户端的 cookie 中(可能是 + 一些自己的信息)。因此,每次客户端访问任何 UI 页面时,它都会向 UI 发送 cookie,然后 UI 从 cookie 发出 API 请求获取 JWT 令牌。
\n\n然而,在这种情况下,JWT 令牌是加密的,UI 无法知道里面的数据。而且,即使它可以看到数据 - 它也不会提供任何信息,并且知道 API 端的动态角色集不会为 UI 端提供任何信息。连同编码的 \xe2\x80\x98numbers\xe2\x80\x99 一起仅在 API 端实时转换为权限。
\n\n问题是 webUI 应该如何知道它是否应该为某个用户提供对管理页面的访问权限。或者显示其他 UI 选项等。
\n\n我认为这个问题可能是微不足道的,因为很多系统都分为 UI + 后端。然而我还没有找到任何好的设计解释。
\n\n希望在这里得到社区的建议。\xe2\x80\xa8感谢您的想法。
\n我终于想出了解决办法。API应该支持外部应用程序注册。之后,外部应用程序将其支持的所有操作(列表)发送给 API。API 存储该列表。当我们需要在 UI 内为最终用户分配一些权限时,我们会为 API 角色分配一些特定的操作。
因此,我们有单点权限处理,并且检索到的列表与 API 权限一样抽象。
结果:用户 -> 将身份验证信息发送到 UI -> UI 将其重新发送到 API -> API 发出并使用自己的权限加密 JWT 并返回请求外部应用程序(UI)的权限列表 -> UI 将权限封装到 cookie 及之后当用户访问UI时可以看到用户有什么权限