Jboss KeyClope java api获取给定客户端的服务帐户用户
我使用的是Key斗篷版本3.4.3.Final社区版本(我知道这是一个较旧的版本,由于业务原因无法更新)及其相应的java客户端,我已经创建了一个客户机,其标志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
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使其正常工作