Keycloak:如何以编程方式添加具有关联用户的新子组?

Keycloak: how to programmatically add new subgroups with associated users?

在 Keycloak 8.0.1 中,我们有一个包含组和子组的领域,如下所示:

group -
    subgroup1
    subgroup2
    ...

我们需要向 group 中插入一批子组和用户。子群应该有一些属性。

我该怎么做?

我试过了:

  1. 将导出的 realm-export.json 文件与新添加的子组一起使用,并在导入时“覆盖”。现在我看不到如何将新用户与子组联系起来。而且我也不确定这样老用户会不会被淘汰

  2. 调用 Keycloak REST API。更新组和添加子组似乎是不可能的。 Documentation 说:

    PUT /{realm}/groups/{id}
    Update group, ignores subgroups.

现在我正在考虑使用 UI 测试工具以编程方式添加用户,但这似乎不必要地复杂。

是否可以通过编程方式添加新的子组,并将用户关联到该子组?我是否遗漏了 REST API 调用或导入功能?是否有另一种方式,例如 Java Admin Client?

您可以在其下创建组和子组,这里是使用 Admin Client 创建子组的示例代码。您还可以将用户关联到这些组

 public void addSubgroups()  {
            RealmResource realm =keycloak.realm("myrealm");
            GroupRepresentation topGroup = new GroupRepresentation();
            topGroup.setName("group");
            topGroup = createGroup(realm, topGroup);

            createSubGroup(realm,topGroup.getId(),"subgroup1");
            createSubGroup(realm,topGroup.getId(),"subgroup2");
        }

       private void createSubGroup(RealmResource realm, String parentGroupId, String subGroupName) {
           GroupRepresentation subgroup = new GroupRepresentation();
             subgroup.setName(subGroupName);
           try (Response response = realm.groups().group(parentGroupId).subGroup(subgroup)){
                if (response.getStatusInfo().getFamily() == Family.SUCCESSFUL) {
                    System.out.println("Created Subgroup : " + subGroupName );
                } else {
                    logger.severe("Error Creating Subgroup : " + subGroupName + ", Error Message : " + getErrorMessage(response));
                }
            } 
       }

       private GroupRepresentation createGroup(RealmResource realm, GroupRepresentation group) {
            try (Response response = realm.groups().add(group)) {
                String groupId = getCreatedId(response);           
                group.setId(groupId);
                return group;
            }
        }