Для работы с API платформы необходимо получить токен доступа (access_token). Токен используется для заполнения заголовка авторизации в запросах к API.

Можно получить токен, отправив отдельный запрос (описан ниже). Но предварительно необходимо выполнить настройку на стороне Keycloak (один из компонентов платформы Robin).

Настройка авторизации в Keycloak для работы с внешним API

Необходимо включить grant_type в кейклоке, для этого

  1. На сервере в конфигурационный файл "keycloak.conf" (обычно расположен в /opt/keycloak/config/keycloak.conf ) добавьте параметр:
    features=token-exchange,admin-fine-grained-authz
  2. После сохранения изменений в файле, перезапустите службу Keycloak командой:
    systemctl restart keycloak
  3. Откройте консоль администратора в Keycloak, выбрав "robin" в качестве realm: https://<адрес вашего Keycloak>:8443/admin/master/console/#/robin
  4. На левой панели откройте раздел "Clients" (1) и нажмите в нем на кнопку "Create client" (2):


  5. Заполните значения так, показано на скриншотах:
    • На шаге №1 "General settings":


    • На шаге №2 "Capability config":


    • На шаге №3 "Login settings":


  6. Нажмите на кнопку "Save".
  7. На левой панели откройте раздел "Users" (1), перейдите в нем на вкладку "Permissions" (2) и переключите параметр "Permissions enabled" (3) в положение "On":


  8. Снова откройте раздел "Clients" (1) на вкладке "Clients list" (2) найдите клиента "realm-management" (3) и нажмите на него:


  9. На открывшейся странице перейдите на вкладку "Authorization" (1), выберите пункт "Permissions" (2), найдите в списке значение "admin-impersonating.permission.users" (3) и нажмите на него:


  10. На открывшейся странице нажмите на поле "Policies" (1) и на кнопку "Create client policy" (2):


  11. В открывшемся окне выберите тип политики "Client":


  12. Укажите в поле "Name" значение "externalclient-impresonator". В поле "Clients" выберите "ExternalClient".


  13. Нажмите на кнопку "Save".
  14. В свойствах "admin-impersonating.permission.users" в поле "Policies" выберите созданную политику "externalclient-impresonator":


  15. Нажмите на кнопку "Save".

Запрос для получения токена

Запрос

Метод: POST 

URL запроса: https://<адрес вашего Keycloak>:8443/realms/robin/protocol/openid-connect/token 

Параметры тела POST-запроса:

ПараметрЗначениеОписание
client_idExternalClientФиксированное значение
client_secret

Секретный ключ клиента. Пример:

lN10xJuiK9fnIlUIRxWEaJwSEKvaeckL

Значение можно получить из панели администратора в Keycloak:

  1. Откройте консоль администратора в Keycloak, выбрав "robin" в качестве realm: https://<адрес вашего Keycloak>:8443/admin/master/console/#/robin
  2. На левой панели откройте раздел "Clients" (1), на вкладке "Clients list" (2) найдите клиента "ExternalClient" и открыть его карточку (3):


  3. В карточке перейдите на вкладку "Credentials" и скопируйте секретный ключ из поля "Client secret":

Если у вас нет доступа в Keycloak, получить ключ можно от администратора платформы Robin в вашей организации.

grant_typeurn:ietf:params:oauth:grant-type:token-exchangeФиксированное значение
tenant_id

Идентификатор тенанта. Пример:

f9fdg366-31e5-11ee-be30-0236va230006

Идентификатор тенанта, в рамках которого будут выполняться запросы к API. Например, при запросе списка машин, система вернет только те машины, которые добавлены в указанный тенант.

Скопировать идентификатор тенанта можно на странице модуля "Мониторинг":

user_id

Идентификатор пользователя. Пример:

5g8c3bc4-2ff1-30a1-36ca-7sc274fa86ad

Идентификатор пользователя платформы Robin, под учётной записью которого будут выполняться запросы к API. При выполнении запросов будут учитываться права пользователя в том тенанте, который вы указали в запросе. Например, при запросе списка роботов, система вернет только тех роботов, который доступны указанному пользователю в указанном тенанте.

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

  1. Откройте в модуле "Управление доступом" раздел "Пользователи тенанта":


  2. Нажмите на логин нужного пользователя для открытия его карточки.
  3. Скопируйте идентификатора пользователя из URL страницы карточки:


Пример запроса
POST https://prod.rpa.ru:8443/realms/robin/protocol/openid-connect/token
Content-Type: application/x-www-form-urlencoded
client_id=ExternalClient&client_secret=lN10xJuiK9fnIlUIRxWEaJwSEKvaeckL&grant_type=urn:ietf:params:oauth:grant-type:token-exchange&tenant_id=f9fdg366-31e5-11ee-be30-0236va230006&user_id=5g8c3bc4-2ff1-30a1-36ca-7sc274fa86ad

Ответ

При успешном выполнении запроса будет возвращен ответ с кодом 200

В теле ответа будет указан access_token, который необходим при выполнении запросов к API платформы.

Пример JSON ответа
{
  "access_token": "ваш_токен_доступа",
  "expires_in": 3600,
  "token_type": "Bearer"
}

Примечания

  • Токен необходимо указывать в запросах в заголовке Authorization:

Authorization: Bearer <ваш_токен_доступа>

  • Токен имеет ограниченное время жизни. Срок его жизни можно узнать или изменить через интерфейс Keycloak.
  • Для безопасности никогда не храните секретный ключ (client_secret) в открытом виде.
  • Нет меток