gpt4 book ai didi

java - 创建 keycloak 客户端并以编程方式从其他客户端分配角色

转载 作者:行者123 更新时间:2023-12-04 14:17:22 27 4
gpt4 key购买 nike

我想创建新的客户端,然后分配给这个客户端角色“view-users”,它由“realm-management”客户端拥有。目标:我将能够通过这个新客户端列出用户。

我可以创建客户,但不能为该客户分配角色:创建连接

public Keycloak keycloakAdmin() {
return KeycloakBuilder.builder()
.serverUrl("http://localhost:" + environment.getRequiredProperty("keycloak.port") + "/auth")
.realm("master")
.clientId("admin-cli")
.username("admin")
.password("password")
.build();
}

然后我创建客户端

ClientRepresentation encourageClient = new ClientRepresentation();
encourageClient.setId("my-client");
encourageClient.setSecret("password");
encourageClient.setDirectAccessGrantsEnabled(true);
encourageClient.setServiceAccountsEnabled(true);
keycloakAdmin.realm("my-realm").clients().create(encourageClient);

但是当我在创建客户端时创建角色或稍后尝试分配它时,即使方法调用不返回异常,也不会分配角色。

最佳答案

棘手的部分是我需要服务帐户用户,然后代表该用户分配角色。还花了我很长时间的是,我创建的客户端具有相同的 ClientRepresentation.getId() 和 ClientRepresentation.getClientId()('my-client'),但对于其他客户端而言,这些可能完全不同,我需要 getId()

RealmResource myRealm = keycloakAdmin.realm("my-realm");
String userId = myRealm.clients().get("my-client").getServiceAccountUser().getId();
UserResource serviceAccountUser = myRealm.users().get(userId);

ClientRepresentation clientThatOwnsRole = myRealm.clients()
.findByClientId("realm-management").get(0);

String clientIdOfRoleOwner = clientThatOwnsRole.getId();
ClientResource clientResourceOfRoleOwner = myRealm.clients().get(clientIdOfRoleOwner);
RoleResource roleResourceToAssign = clientResourceOfRoleOwner.roles().get("view-users");

serviceAccountUser.roles().clientLevel(clientIdOfRoleOwner).add(Collections.singletonList(roleResourceToAssign.toRepresentation()));

关于java - 创建 keycloak 客户端并以编程方式从其他客户端分配角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58937537/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com