Виклик реєстру зовнішньою системою: Отримання JWT-токена у Keycloak
1. Загальний опис
Щоб отримати доступ до ресурсів реєстру на Платформі, зовнішня система має отримати спеціальний токен доступу — JWT-токен. Він призначений для подальшої авторизації зовнішніх систем при взаємодії з реєстрами, що розгорнуті в межах Платформи.
Токен доступу, або JWT-токен, видається сервісом керування ідентифікацією та доступом Keycloak. Для отримання токена необхідно виконати API-запит до відповідного ендпоінту /token
у Keycloak API.
На цій сторінці ми розглянемо емуляцію отримання JWT-токена із Keycloak за допомогою інструмента Postman. |
2. Отримання JWT-токена доступу до реєстру
Найперше, сформуйте запит для отримання токена доступу до реєстру. Це можна зробити за допомогою Postman — інструмента для тестування та розробки API.
-
Завантажте застосунок Postman з офіційного джерела за посиланням: https://www.postman.com/downloads/, або використовуйте його вебверсію.
-
Відкрийте додаток та створіть новий запит. Для цього натисніть
Create a request
. -
Сформуйте запит на отримання JWT-токена:
-
Визначте HTTP-метод —
POST
. -
Вкажіть шлях до ресурсу:
Приклад 1. URL ресурсу: ендпоінт /tokenhttps://<server-name>/auth/realms/<keycloak-realm>/protocol/openid-connect/token
-
Замість
<server-name>
підставте назву сервера. -
Замість
<keycloak-realm>
підставте назву реалму в Keycloak.
Приклад:
https://platform-keycloak.apps.your-server.mdtu-ddm.projects.epam.com/auth/realms/consent-01-external-system/protocol/openid-connect/token
-
-
Введіть параметри тіла запита.
Приклад 2. Тіло запита{ "grant_type": "client_credentials", "client_id": "test-ext", "client_secret": "u43exi9l6kc4gcm6ksjbbsg7gu2dyocyjey1" }
Параметр Значення grant_type
Тип гранту в OIDC. Грант
"client_credentials"
можна використовувати для міжмашинної автентифікації (система-система). У цьому гранті певний користувач не авторизується, а перевіряються облікові дані та повертається загальний токен доступу —access_token
.client_id
Ідентифікатор зовнішньої системи (службова назва зовнішньої системи у Control Plane).
client_secret
Пароль доступу до реєстру, згенерований в результаті надання доступу зовнішній системі у Control Plane (див. детальніше — Зміна пароля доступу до реєстру)
-
-
Натисніть
Send
, щоб надіслати запит. -
У відповідь API-сервіс повертає об’єкт із JWT-токеном у закодованому вигляді (Base64Url), а також додаткові атрибути.
У відповіді повертається список ролей з Keycloak, для яких передбачений доступ. JWT-токен можливо отримати лише для одного клієнта за раз. Приклад 3. Тіло відповіді від API-сервісу{ "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxdk4walJlNzJJNzBwQl9rdjBWVkZHR0lWSk50OF9mN3AtdzhKRHE2SlZvIn0.eyJleHAiOjE2NTcyOTUzMjUsImlhdCI6MTY1NzI5NTAyNSwianRpIjoiNDY5NDA3MDYtMzQ0MS00ZWMyLWJmNDUtYzhiYWRjZGM3ZDIyIiwiaXNzIjoiaHR0cHM6Ly9wbGF0Zm9ybS1rZXljbG9hay5hcHBzLmNpY2QyLm1kdHUtZGRtLnByb2plY3RzLmVwYW0uY29tL2F1dGgvcmVhbG1zL21kdHUtZGRtLWVkcC1jaWNkLWxvd2NvZGUtZGV2LWRldi1leHRlcm5hbC1zeXN0ZW0iLCJzdWIiOiI0YTYyMmY0Yy1hOGE4LTQ5M2UtOGQ4ZS03MjMyNGJlODEwZGMiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiJ0cmVtYml0YS1pbnZva2VyIiwiYWNyIjoiMSIsImFsbG93ZWQtb3JpZ2lucyI6WyIiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbInRyZW1iaXRhLWludm9rZXIiXX0sInNjb3BlIjoicHJvZmlsZSBlbWFpbCIsImVkcnBvdSI6IjAiLCJlbWFpbF92ZXJpZmllZCI6ZmFsc2UsImNsaWVudEhvc3QiOiI4NS4yMjMuMjA5LjE4IiwiY2xpZW50SWQiOiJ0cmVtYml0YS1pbnZva2VyIiwiZHJmbyI6IjAiLCJmdWxsTmFtZSI6ItCh0LXRgNCy0ZbRgdC90LjQuSDQutC-0YDQuNGB0YLRg9Cy0LDRhyDQotGA0LXQvNCx0ZbRgtC4IiwicHJlZmVycmVkX3VzZXJuYW1lIjoic2VydmljZS1hY2NvdW50LXRyZW1iaXRhLWludm9rZXIiLCJjbGllbnRBZGRyZXNzIjoiODUuMjIzLjIwOS4xOCJ9.uhf6GZFd9fc1IDehIlo9kspsOPxxLSqtsOTAmUt3cneMZFs77AE-Ew7UoirLUfy0kmjfGy0tfcG1gj2nM6EXmAW1_XDCvHB_ygM-NnkS8B_FkgoIdcB5XkBWQ2HrE0YnSN5QnOWMkgi2dtYkubgd3g37__46-2Uxeg6l-OVYjdDEQ_kEa2rrGl9ckYLflZgM_-PKG3XxvXuJjuKuC2GqLGF-ngpWg_S672pwIqqr0li20JjXYdpO-jtEqPMKU6pckBwmkAWsiO6lmz2b9XUe0i2nWECsChA9IHmgds1UgCjxtp0KoToqAwcbNhXgdyh8hOI0WCNig56dSWc3sAoDmw", "expires_in": 300, "refresh_expires_in": 0, "token_type": "Bearer", "not-before-policy": 0, "scope": "profile email" }
Отриманий токен можливо використовувати необмежену кількість разів упродовж часу його дійсності, який зазначається у параметрі
expires_in
і має значення 300 секунд.-
Термін дії токена — 300 секунд (за замовчуванням).
-
Тип токена —
Bearer
.
Для зручності можна розкодувати токен доступу у формат JSON та перевірити, для якого клієнта та реалму видано токен. Для цього скористайтеся інструментом https://jwt.io/.
На виході отримаємо наступний об’єкт:
{ "realm_access": { "roles": [ "trembita-invoker" ] } }
У нашому випадку надано доступ для ролі
trembita-invoker
у реалміconsent-01-external-system
відповідного реєстру в Keycloak.Детальніше про JWT-токен ви можете переглянути на сторінці Управління профілем користувача. -
-
Надалі використовуйте отриманий
access_token
для авторизації при запитах до ресурсів реєстру. Тип токена має бутиBearer
— він визначається у заголовкуAuthorization
.Зображення 1. Bearer Token, вказаний як змінна{{access_token}}
Є 2 типи ресурсів, до яких можна звернутися у цільовому реєстрі:
-
Ресурси бізнес-процесів — передбачені ендпоінти для взаємодії з бізнес-процесами. Наразі підтримується один єдиний ендпоінт для запуску бізнес-процесу —
/start-bp
.- Приклад:
-
https://external-service-api-<registry-server>/api/gateway/business-process/api/start-bp
де
<registry-server>
— назва реєстру та сервер, на якому реєстр розгорнуто.Шлях до ресурсу /start-bp у реєстрі consent-02 на тестовому сервері:https://external-service-api-consent-02-main.apps.test-server.mdtu-ddm.projects.epam.com/api/gateway/business-process/api/start-bp
-
Ресурси фабрики даних — передбачені моделлю даних критерії пошуку (Search Conditions), до яких ви надаєте доступ через відповідні атрибути (див. детальніше Налаштування доступу до API-представлень реєстру)
- Приклад:
-
https://external-service-api-<registry-server>/api/gateway/data-factory/<search-condition>
де
<registry-server>
— назва реєстру та сервер, на якому реєстр розгорнуто, а<search-condition>
— ендпоінт, створений на базі критерію пошуку у БД.Шлях до ресурсу /count-units-in-parallel у реєстрі mon-school на сервері envone:https://external-service-api-mon-school-main.apps.envone.dev.registry.eua.gov.ua/api/gateway/data-factory/count-units-in-parallel
-