Ответ на вопрос в беседе о keycloak от @zonaut. Может быть, это кому-то поможет!
«Лично я бы выбрал пример 2, создав выделенную клиентскую учетную запись службы, поскольку мы связываем службу со службой».
Пример 1 -> Использование пользователя
- Создайте нового клиента в желаемой области -> keycloak-admin
- Выберите publi c клиент с включенным только прямым доступом
- Создать новый роль, включить составные роли
- введите управление областью в клиентские роли в составных ролях
- добавьте доступные роли, которые вам нужны
- Выберите пользователя и откройте вкладка сопоставлений ролей
- введите keycloak-admin в ролях клиента и добавьте необходимые роли
Код:
Keycloak keycloak = KeycloakBuilder.builder()
.serverUrl("http://localhost:8080/auth")
.grantType(OAuth2Constants.PASSWORD)
.realm("realm-name")
.clientId("keycloak-admin")
.username("username")
.password("password")
.resteasyClient(
new ResteasyClientBuilder()
.connectionPoolSize(10).build()
).build();
keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");
Пример 2 -> Использование конфиденциальной учетной записи службы
- Создайте нового клиента в желаемой области -> keycloak-admin
- Выберите конфиденциального клиента с включенной только учетной записью службы
- Выбор вкладки ролей учетной записи службы
- введите управление областью в роли клиента
- добавьте необходимые вам доступные роли
Код:
Keycloak keycloak = KeycloakBuilder.builder()
.serverUrl("http://localhost:8080/auth")
.grantType(OAuth2Constants.CLIENT_CREDENTIALS)
.realm("realm-name")
.clientId("keycloak-admin")
.clientSecret("1c7e2815-c4dc-401c-af2f-ebddad3b4a79")
.resteasyClient(
new ResteasyClientBuilder()
.connectionPoolSize(10).build()
).build();
keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");
Пример 3 -> Использование учетной записи администратора
Вы также можете использовать пользователя admin с предоставленным паролем и использовать существующий клиент admin-cli.
Keycloak keycloak = KeycloakBuilder.builder()
.serverUrl("http://localhost:8080/auth")
.grantType(OAuth2Constants.PASSWORD)
.realm("master")
.clientId("admin-cli")
.username("admin")
.password("password")
.resteasyClient(
new ResteasyClientBuilder()
.connectionPoolSize(10).build()
).build();
keycloak.tokenManager().getAccessToken();
RealmResource realmResource = keycloak.realm("realm-name");