Я использую Keycloak версии 3.4.3. Окончательная версия сообщества (я знаю, что это более старая версия и не может обновить ее по деловым причинам) и соответствующий ей клиент java, я создал клиента с флагом serviceAccountEnabled
установлен на true
и ему необходимо назначить realm-management
роли клиента, т.е. из раздела service-account-roles
.
Я могу успешно создать клиента, но не могу назначить ему realm-management
роли клиента как он требует выборки service-account-user
, которая каждый раз возвращает ноль, ниже приведен мой фрагмент кода
Код для создания клиента
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);
Код для назначения realm-management
ролей для service-account-user
* клиента 1016 *
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();
Проблема в том, что я не получаю service-account-user
для клиента, которого я создал на предыдущем шаге, однако я проверил, что пользователь создан, также я могу получить service-account-user
для существующих клиентов, это больше похоже на проблему транзакции, но я выполняю создание клиента и назначение ролей в двух разных сеансах.
Может кто-нибудь указать мне, где я ошибаюсь, или указать, как получить service-account-user
.