Jboss KeyClope java api获取给定客户端的服务帐户用户

Jboss KeyClope java api获取给定客户端的服务帐户用户,jboss,transactions,keycloak,jta,keycloak-services,Jboss,Transactions,Keycloak,Jta,Keycloak Services,我使用的是Key斗篷版本3.4.3.Final社区版本(我知道这是一个较旧的版本,由于业务原因无法更新)及其相应的java客户端,我已经创建了一个客户机,其标志servicecomportenabled设置为true,并且需要将领域管理客户机的角色分配给它,即从服务帐户角色部分 我能够成功创建客户端,但无法将领域管理客户端的角色分配给它,因为它需要获取服务帐户用户,该用户每次返回null,下面是我的代码片段 创建客户端的代码 KeycloakTransaction tx

我使用的是Key斗篷版本3.4.3.Final社区版本(我知道这是一个较旧的版本,由于业务原因无法更新)及其相应的java客户端,我已经创建了一个客户机,其标志
servicecomportenabled
设置为
true
,并且需要将
领域管理
客户机的角色分配给它,即从
服务帐户角色部分

我能够成功创建客户端,但无法将
领域管理
客户端的角色分配给它,因为它需要获取
服务帐户用户
,该用户每次返回null,下面是我的代码片段

创建客户端的代码

            KeycloakTransaction tx = session.getTransactionManager();
            tx.begin();
            ClientModel clientModel = myRealm.addClient("myClient-id");
            clientModel.setClientId("myClient-id");
            clientModel.setClientAuthenticatorType("client-secret");
            clientModel.setStandardFlowEnabled(false);
            clientModel.setWebOrigins(Collections.emptySet());
            clientModel.setRedirectUris(Collections.emptySet());
            clientModel.setDirectAccessGrantsEnabled(false);
            clientModel.setImplicitFlowEnabled(false);
            clientModel.setServiceAccountsEnabled(true);
            clientModel.setPublicClient(false);
            clientModel.setProtocol("openid-connect");
            clientModel.setFullScopeAllowed(false);
            //need to inject this from env
            clientModel.setSecret("12345");
            clientModel.updateClient();
            commitOrRollbackTransaction(tx);
领域管理角色分配给客户的服务帐户用户的代码

KeycloakTransaction tx = session.getTransactionManager();
tx.begin();
RealmModel myRealm = keycloakSession.realms().getRealmByName("myRealm");
ClientModel clientModel = myRealm.getClientByClientId("myClient-id");
ClientModel realmManagementClient = myRealm.getClientByClientId("realm-management");
Set<RoleModel> roles = realmManagementClient.getRoles();
UserModel serviceAccountUser = keycloakSession.users().getServiceAccount(clientModel);
if(serviceAccountUser != null){
   roles.stream().forEach(r -> serviceAccountUser.grantRole(r));
 }
tx.commit();
keydovetransactiontx=session.getTransactionManager();
tx.begin();
RealmModel myRealm=keydeposition.realms().getRealmByName(“myRealm”);
ClientModel ClientModel=myRealm.getClientByClientId(“myClient id”);
ClientModel realmManagementClient=myRealm.getClientByClientId(“领域管理”);
Set roles=realmanagementclient.getRoles();
UserModel serviceAccountUser=keydeposition.users().getServiceAccount(clientModel);
如果(serviceAccountUser!=null){
roles.stream().forEach(r->serviceAccountUser.grantRole(r));
}
tx.commit();
问题是,我没有为我在上一步中创建的客户端获取
服务帐户用户
,但是我已经验证了该用户已创建,并且我可以为现有客户端获取
服务帐户用户
,这看起来更像是一个事务问题,但我在两个不同的会话中执行客户端创建和角色分配


有人能告诉我哪里弄错了,或者告诉我如何获取
服务帐户用户

使用RealmManager和ClientManager Keyclope API使其正常工作