1

目标:
我们的目标是更新整个领域提供的 json 文件。

问题:
目前的问题是我们似乎无法完全更新领域以包括客户端更改。

采取的措施:
选项 1:根据Keycloak Admin CLI 文档,可以使用以下命令从 JSON 文件更新 Keycloak 领域:

kcadm.sh update realms/demorealm -f demorealm.json

但是,在对 JSON 文件部分(即客户端的描述)中的属性进行更新时clients,更改不会反映在 Keycloak 领域中。

我们也试着看看kcadm.sh help update。我们尝试使用合并标志(将新值与服务器上的现有配置合并。除非--file指定,否则自动启用合并)。我们确实指定了一个文件,因此尝试使用该标志启用它 - 但没有成功。客户并没有像预期的那样发生变化。

选项 2:我们尝试了Keycloak 文档中的部分导入命令

$ kcadm.sh create partialImport -r demorealm -s ifResourceExists=OVERWRITE-o -f demorealm.json

ifResourceExists设置为,OVERWRITE它可以准确地更改客户端。但是,它会更改其他 Realm 配置,例如分配的用户角色。例如:通过 Keycloak UI 手动创建新用户并为用户设置角色后,在OVERWRITE设置了标志的情况下运行命令后角色会丢失。将 设置ifResourceExistsSKIP不会正确更新客户端的值,因为它会被完全跳过。

问题: 是否可以使用不同的命令或不同的标志,使用单个 Keycloak 管理命令更新整个 Keycloak 领域?上面列出的选项 1 或选项 2 都不适合我们。我们希望update client在更新 Realm 时避免单独调用。

注意:
我们已正确验证并确认在领域级别所做的更改已反映在 Keycloak 中。

4

1 回答 1

4

经过进一步研究,我们决定采用的方法是更新领域级别设置:

kcadm.sh update realms/demorealm -f demorealm.json

然后我们遍历客户端并添加/更新它们:

kcadm.sh update clients/{clients-uuid} -f clientfile.json

由于前面的命令不会更新客户端角色,因此我们必须使用以下命令添加角色:

kcadm.sh update clients/{clients-uuid}/roles/{role-name} -f rolefile.json

最后,要添加复合角色,我们使用以下命令:

kcadm.sh add-roles --cclientid {clientID} --rid {id of client role} --rolename {name of role to add}

于 2021-03-09T14:20:00.257 回答