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

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 具有访问 A, B 的权限(我使用这些授权范围:readwritecreatedelete)。
R2 有权访问 A, B, C, D 资源。
G1 具有角色 R1 并且 G2 具有分配给它们的角色 R2

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

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

我相信 keycloak 在分配权限时会使用 and 条件方式进行检查。有没有办法用彼此专有的资源来定义角色?


根据我使用 Keycloak 的经验,如果您没有完整的配置,我建议您将权限纳入图片。

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)

我的处理方法是:

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

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

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

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

  • 将权限与所需的角色策略关联

  • (以你为例)

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

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

    将决策策略保持为肯定。