Клиент администратора Keycloak в Spring Boot - PullRequest
0 голосов
/ 06 мая 2020

У меня проблемы с использованием keycloak-admin-client при весенней загрузке.

Если я попробую с этим кодом, я получу 401 (неавторизованный):

public Keycloak getKeycloakInstance() {
  var keycloak = KeycloakBuilder.builder()
   .serverUrl(SERVER_URL)
   .realm(REALM)
   .username(USERNAME)
   .password(PASSWORD)
   .clientId(CLIENT_ID)
   .build();
  return keycloak;
}

Кроме того, если я введу .resteasyClient(....) и .clientSecret(...) в приведенный выше код, я получу плохой запрос.

В клиентских ролях я создал новую составную роль и дал ей все роли управления областью, может быть, я что-то неправильно настроил?

Где найти документацию по использованию этой зависимости клиента администратора?

<dependency>
 <groupId>org.keycloak</groupId>
 <artifactId>keycloak-admin-client</artifactId>
 <version>10.0.0</version>
</dependency>

1 Ответ

0 голосов
/ 07 мая 2020

Ответ на вопрос в беседе о keycloak от @zonaut. Может быть, это кому-то поможет!

«Лично я бы выбрал пример 2, создав выделенную клиентскую учетную запись службы, поскольку мы связываем службу со службой».

Пример 1 -> Использование пользователя

  1. Создайте нового клиента в желаемой области -> keycloak-admin
  2. Выберите publi c клиент с включенным только прямым доступом
  3. Создать новый роль, включить составные роли
    • введите управление областью в клиентские роли в составных ролях
    • добавьте доступные роли, которые вам нужны
  4. Выберите пользователя и откройте вкладка сопоставлений ролей
    • введите 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 -> Использование конфиденциальной учетной записи службы

  1. Создайте нового клиента в желаемой области -> keycloak-admin
  2. Выберите конфиденциального клиента с включенной только учетной записью службы
  3. Выбор вкладки ролей учетной записи службы
    • введите управление областью в роли клиента
    • добавьте необходимые вам доступные роли

Код:

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");
...