在密钥斗篷中设置具有两层的角色模型

时间:2019-07-02 16:09:56

标签: keycloak

我是一个前端项目的一部分,我需要一些帮助将我们的授权模型带入密钥斗篷。我们建立在node.js之上,整个项目使用无状态微服务-以及我们的前端中间件和我们使用的整个后端服务。前端使用标准的JS适配器进行会话和令牌管理。

到目前为止,我们已经确定了四个角色:旅行社,后台,配置员和数据安全员。到目前为止,这很容易。我的问题是如何为我们需要的下一个授权层建模。

例如:对于旅行社,我们希望能够授予每个人是否可以查看特定客户数据或能够取消订单的权限。旅行社大约有6-8个选项。因此,对于后勤部门,应该有库存操作选项或对订单的不同看法。

像后端一样,我们不保留任何数据!这就是为什么我将所有内容存储在keycloak中并找到一种轻松地将这些信息带回我们的中间件的原因。

这是我到目前为止尝试过/想到的:
 *在第一层使用组,第二层使用角色。 ->不起作用,因为这些组不会在令牌中公开。
 *对上层使用领域角色,对下层使用属性。 ->属性不包含在访问令牌中。
 *将领域角色用于下层层次结构的上层角色和客户端角色。 ->可行,但是我们必须确保第二层上的角色确实只与第一层上的一个角色相关联。我还不知道
 *在第一层使用角色,在第二层使用资源。 ->这似乎非常接近我们的需求。但是目前我无法通过所有这些策略和权限找出正确的方法...

尽管我没有提供任何代码,但在Stack Overflow上的讨论似乎很有成果,我想尝试一下。

感谢您的帮助,如果我会提供更多信息,请告诉我。

斯文

1 个答案:

答案 0 :(得分:0)

与下降投票者不同,我认为这是一个合理的问题。

就使用Keycloak组/角色/属性而言,您似乎处在正确的道路上。您可以选择适合自己需求的组合。例如,如果您需要层次结构,则可以使用组。或者您可能要使用角色,因为这些角色可以是复合角色。

无论选择哪种路径,您的问题都是如何在令牌中公开这些内容。可以使用映射器配置来完成。

例如,要向用户公开角色,您将要创建一个“用户领域角色”映射器,以将您的角色添加为对令牌的声明。为此:

  1. 点击左侧菜单中的“客户”
  2. 单击您正在使用的客户端
  3. 点击“映射器”标签
  4. 添加类型为“用户领域角色”的映射器。

还有“组成员身份”和“用户属性”的映射器,可用于将这两个概念添加为声明。如果这些还不够,或者您需要更多细粒度的控制,则可以滚动自己的自定义映射器。有关如何执行此操作的信息,请参阅此处的Keycloak文档和其他有关Stack Overflow的问题。