Как я могу получить информацию о других пользователях (имя пользователя, имя) по идентификатору? [Keycloak] - PullRequest
1 голос
/ 12 апреля 2019

Как я могу получить атрибуты keycloak пользователя (имя пользователя, имя, адрес электронной почты ...) на основе идентификатора пользователя? Пользователю, которого я использую в сеансе Keycloak, уже назначена роль view-users , поэтому я должен иметь возможность перечислять по крайней мере всех пользователей, есть ли класс Keycloak, который я могу использовать?

Здесь я пытаюсь добиться того, чтобы избежать репликации базы данных пользователей keycloak в другую локальную базу данных, но не представляется возможным получить доступ к какой-либо другой информации о пользователе, кроме той, что в текущем сеансе ...

1 Ответ

2 голосов
/ 14 апреля 2019

Вы можете использовать Admin REST API.Подробное описание соответствующего API доступно здесь .Также вы можете использовать API-интерфейс JAVA.Ниже приведено несколько примеров.

Пример 1, REST:

Получить токен доступа:

curl \
  -d "client_id=admin-cli" \
  -d "username=admin" \
  -d "password=secret" \
  -d "grant_type=password" \
  "http://localhost:8080/auth/realms/master/protocol/openid-connect/token"

Получить всех пользователей:

curl \
  -H "Authorization: bearer eyJhbGciOiJSUzI...." \
  "http://localhost:8080/auth/admin/realms/master/users"

Пример вывода:

[
     {
        "id":"349f67de-36e6-4552-ac54-e52085109616",
        "username":"admin",
        "enabled":true,
        ...
     },
     {
        "id":"08afb701-fae5-40b4-8895-e387ba1902fb",
        "username":"lbalev",
        "enabled":true,
        ....
     }
  ]

Получить пользователя на основе идентификатора пользователя:

curl \
  -H "Authorization: bearer eyJhbGciOiJSU...." \
  "http://localhost:8080/auth/admin/realms/master/users/349f67de-36e6-4552-ac54-e52085109616"

Пример 2, JAVA API:

Получить б / у на основе использованного идентификатора:

public class TestUserAccess {

  private static final String SERVER_URL = "http://localhost:8080/auth";
  private static final String REALM = "master";
  private static final String USERNAME = "admin";
  private static final String PASSWORD = "secret";
  private static final String CLIENT_ID = "admin-cli";

  public static void main(String[] args) {

    Keycloak keycloak = KeycloakBuilder
        .builder()
        .serverUrl(SERVER_URL)
        .realm(REALM)
        .username(USERNAME)
        .password(PASSWORD)
        .clientId(CLIENT_ID)
        .resteasyClient(new ResteasyClientBuilder().connectionPoolSize(10).build())
        .build();

    UsersResource usersResource = keycloak.realm(REALM).users();
    UserResource userResource = usersResource.get("08afb701-fae5-40b4-8895-e387ba1902fb");
    System.out.println(userResource.toRepresentation().getEmail());
  }
}

Соответствующие зависимости для приведенного выше примера (обратите внимание, что версии могут быть неактуальными):

dependencies {
    compile group: 'org.keycloak', name: 'keycloak-admin-client', version: '3.3.0.CR2'
    compile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.1.4.Final'
    compile group: 'org.jboss.resteasy', name: 'resteasy-client', version: '3.1.4.Final'
    compile group: 'org.jboss.resteasy', name: 'resteasy-jackson2-provider', version: '3.1.4.Final'
}
...