Как получить пользователей Keycloak через REST без учетной записи администратора

Есть ли способ получить список пользователей в области Keycloak через REST БЕЗ использования учетной записи администратора? Может быть, какая-то назначаемая роль из консоли администратора? Ищете любые идеи.

Сейчас я использую учетные данные администратора, чтобы захватить токен доступа, а затем используя этот токен, чтобы вытащить пользователей из конечной точки realm/users.

Получение маркера (из приложения node.js через request):

uri: '${keycloakUri}/realms/master/protocol/openid-connect/token',
form: {
  grant_type: 'password',
  client_id: 'admin-cli',
  username: adminUsername,
  password: adminPassword,
}

Использование токена:

uri: '${keycloakUri}/admin/realms/${keycloakRealm}/users',
headers: {
  'authorization': 'bearer ${passwordGrantToken}',
}

Я хочу иметь возможность использовать общую пользовательскую информацию (имена пользователей, электронные письма, полные имена) из клиентского приложения.

Ответы

Ответ 1

Вам необходимо назначить роль view-users от клиента realm-management для нужного пользователя. Это будет конфигурация для пользователя:

enter image description here

Затем вы можете получить всех пользователей из конечной точки ${keycloakUri}/admin/realms/${keycloakRealm}/users. То, что информация, полученная из enpoint, принята через Почтальон:

enter image description here

Кроме того, независимо от заданного вопроса, я настоятельно рекомендую вам не использовать grant_type=password, если вам абсолютно не нужно. Из блога Keycloak:

RESULT='curl --data "grant_type=password&client_id=curl&username=user&password=password" http://localhost:8180/auth/realms/master/protocol/openid-connect/token'

Это немного загадочно, и, к счастью, это не то, как вы должны получать токены. Токены должны быть получены веб-приложениями путем перенаправления на страницу входа в Keycloak. Мы делаем это только для того, чтобы протестировать сервис, поскольку у нас пока нет приложения, которое может вызвать сервис. По сути, мы здесь выполняем вызов конечной точки токена OpenID Connect Keycloaks с типом предоставления, установленным в пароль, который представляет собой поток учетных данных владельца ресурса, который позволяет менять имя пользователя и пароль для токена.

Смотрите также спецификацию Oauth2.