如何避免将用户添加到具有资源的所有组

How to avoid adding user to all groups with a resource

刚开始使用 Keycloak,我正在尝试了解为用户分配角色。这是我使用的格式。我创建角色和用户,并创建具有特定角色的组。然后,我将用户分配给组,以根据组中的角色获得权限。现在我在下面的情况下遇到了困难。

假设我有 4 个资源 A, B, C, D、2 个角色 R1, R2、2 个组 G1, G2 和一个用户 U.

R1 有权限(我使用这些授权范围:readwritecreatedelete)访问 A, B .
R2 仅有权访问 A, B, C, D 资源。
G1 分配了角色 R1G2 分配了角色 R2

现在我创建了一个用户 U 并希望授予他 G1 的访问权限,希望该用户能够访问上述 2 个资源。但事实并非如此,我注意到 U 没有访问 4 种资源中的任何一种的权限。我还需要将此用户添加到 G2 才能访问所有 4 个资源,这不是我想要的。

同样在另一种情况下,如果我想将用户添加到 G2,我希望他能够访问所有 4 个资源。但是我注意到这个用户只能访问 C, D。我也应该将他添加到 G1 以访问所有资源。

我相信 keycloak 在分配权限时会检查 and 条件方式。有没有办法定义资源互不相同的角色?

根据我使用 Keycloak 的经验,如果您没有完整的配置,我建议将 permissions 纳入考虑范围。

https://www.keycloak.org/docs/latest/authorization_services/#_permission_overview

NOTE: Please note that this is just a PERSONAL recommendation, not a hard-fast approach.

使用权限时,可以将决策策略设置为肯定。 (在您的情况下,默认权限似乎设置为一致,这意味着所有政策都必须评估为真)

(https://www.keycloak.org/docs/latest/authorization_services/#_permission_decision_strategies)

我的处理方式是:

  1. 为组分配角色(与您所做的相同) G1 -> R1 G2 -> R2

  2. 将用户添加到组(与您所做的相同)

  3. 为 R1(Policy1) 和 R2(Policy2) 创建基于角色的策略。

  4. 为每个资源(PermA、PermB、PermC、PermD)创建权限

  5. 将权限与所需的角色策略相关联

(以你为例)

因为 R2 可以访问所有资源。将 Policy2 与所有 4 个权限相关联。

因为 R1 可以访问 A、B 资源。将 Policy1 仅与 PermA、PermB 相关联。

保持决策策略为肯定。