Keycloak:如何以编程方式添加具有关联用户的新子组?
Keycloak: how to programmatically add new subgroups with associated users?
在 Keycloak 8.0.1 中,我们有一个包含组和子组的领域,如下所示:
group -
subgroup1
subgroup2
...
我们需要向 group
中插入一批子组和用户。子群应该有一些属性。
我该怎么做?
我试过了:
将导出的 realm-export.json
文件与新添加的子组一起使用,并在导入时“覆盖”。现在我看不到如何将新用户与子组联系起来。而且我也不确定这样老用户会不会被淘汰
调用 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;
}
}
在 Keycloak 8.0.1 中,我们有一个包含组和子组的领域,如下所示:
group -
subgroup1
subgroup2
...
我们需要向 group
中插入一批子组和用户。子群应该有一些属性。
我该怎么做?
我试过了:
将导出的
realm-export.json
文件与新添加的子组一起使用,并在导入时“覆盖”。现在我看不到如何将新用户与子组联系起来。而且我也不确定这样老用户会不会被淘汰调用 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;
}
}