2

我是 Keycloak 框架的新手,在痛苦地编写了自己的解决方案之后,我们希望转换为 KeyCloak。这似乎是一个很有前途的解决方案,但不幸的是缺乏自我描述文档。我已经阅读了教程和术语,但是,我似乎无法通过 Keycloak 概念为我的授权用例塑造一个合适的模型。我发布了我的问题!在 Keycloak 邮件列表中没有任何回应,所以我决定在这里联系。

请考虑这个使用场景:

  • 您为汽车经销商提供 SaaS 解决方案。
  • 每个经销商在创建时都会继承一组默认角色,例如管理员、经理、销售、会计……)
  • 经销商可以添加/删除默认角色的权限。
  • 经销商可以定义自己的自定义角色。
  • 经销商有多个供应商,每个供应商都有几个角色(管理员、会计师、供应商)
  • 经销商有许多部门,每个部门可能对该部门有自己的角色。
  • 基本上,您在不同的环境中扮演不同的角色。

在我的内置模型中,我有一个将角色连接到委托人(实体)的表,并且将 ACL(或权限)分配给角色。主体可以是“DealershipA”、“DealershipB”、“Vendor1”、“Department0”中的任何一个。

现在我的问题是:在 Keycloak 中实现此场景的最佳实践是什么。

  • 您将如何向实体添加/分配角色?
  • 您会将经销商、供应商或部门视为资源吗?

预先感谢您的所有帮助,

4

1 回答 1

2

IIUC 可以根据您想要执行的 KeyCloak 集成级别使用不同的方法来实现此场景。让我试着表达一种这样的方式。这很可能不是最理想的,但是您可以将其用作起点。

首先,Dealership 可以被视为租户分隔符,因此可以将单个 Dealership 中的用户聚集到 KeyCloak Realm 1中。Realm 将用户分组在一起,听起来 Dealership 就是这样的分隔符(如果确实允许用户通过相同的用户配置文件访问不同的 Dealership,则不能应用这种分隔)。

关于角色,在一种方法中,每个经销商、供应商、部门角色(管理员、销售、会计等)都可以是领域角色2。这些是特定经销商中用户可用的角色。但是,我想不出一种 KeyCloak 本地方式来区分经销商角色、供应商角色和部门角色。这些可以通过命名标准来区分(例如:)vendor-admin

在另一种方法中,每个实体(经销商、供应商、部门)也可以是具有自己的属性和角色的组 [3]。一个优点可能是实体之间的关系可以在组-子组关系中复制。 部门组的样本组层次结构 属性

这可以让您开始对 KeyCloak 中的实体进行建模。

在授权方面,您似乎可以使用 KeyCloak [4] 中提供的授权服务。我没有亲自使用过这个特性,但如果你想依赖 KeyCloak 作为 PAP、PDP 和 PEP [5],这看起来是可行的方法。

例如,可以授予或拒绝用户访问特定供应商或部门的资源,因为用户信息包含用户的组关系。这似乎可以通过基于组的策略 [6] 实现。

为了更直接地回答问题,

  1. 用户创建过程应确保建立正确的角色和(或)组关联

  2. 资源似乎是每种实体类型提供的服务(例如:add_vendor()、、view_accounts()

希望这有助于进行设计。由于目前大多数细节尚不清楚,因此必须根据未来的需求重新设计设计,但至少有一个模型来验证您将能够做得更好。

1 - https://www.keycloak.org/docs/6.0/server_admin/#core-concepts-and-terms#realms

2 - https://www.keycloak.org/docs/6.0/server_admin/#realm-roles

[3] - https://www.keycloak.org/docs/6.0/server_admin/#groups

[4] - https://www.keycloak.org/docs/5.0/authorization_services/

[5] - https://www.keycloak.org/docs/5.0/authorization_services/#_overview_architecture

[6] - https://www.keycloak.org/docs/5.0/authorization_services/#_policy_group

于 2019-07-31T09:32:29.067 回答