<aside> <img src="/icons/info-alternate_gray.svg" alt="/icons/info-alternate_gray.svg" width="40px" /> Aвтентифікація клієнта

  1. Для автентифікації в API використовується протокол OAuth2.0.
  2. Клієнти повинні пройти автентифікацію через сервер автентифікації (iam-service) та як результат отримати JWT токен.
  3. Після чого клієнти системи можуть викликати API, вказуючи отриманий токен в заголовку Authorization.

Важливо! Заведення нового клієнта здійснюється через заявку.

</aside>

<aside> <img src="/icons/info-alternate_gray.svg" alt="/icons/info-alternate_gray.svg" width="40px" />

Авторизація користувача здійснюється з використанням keycloack.

</aside>

<aside> <img src="/icons/list-indent_gray.svg" alt="/icons/list-indent_gray.svg" width="40px" />

Зміст

</aside>

Порядок автентифікації та авторизації користувача МІС в e-Stock (Authentication flow)

sequenceDiagram

		
		actor U as User
    participant S as System
    participant I as IAM service
    U ->> S: Open URL
    Note over S,I: Отримання авторизаційного коду сесії
    S ->> I: GET **/auth/realms/eStock/protocol/openid-connect/auth**
    I -->> S: Return code
    U ->> S: Enter login and password
    Note over S,I: Автентифікація користувача
    S ->> I: POST **/auth/realms/eStock/login-actions/authenticate**
    alt Користувача не знайдено
        I -->> S: Return "Неправильний юзернейм чи пароль"
    else Користувача знайдено
        I -->> S: Return 302 Found
        Note over S,I: Обмін авторизаційного коду сесії на токен користувача
        S ->> I: POST **/auth/realms/eStock/protocol/openid-connect/token**
        I -->> S: Return token
    end
    S -->> U: Provides access

<aside> <img src="/icons/report_red.svg" alt="/icons/report_red.svg" width="40px" />

Запити конфігуруються в бібліотеці. Все, що потрібно — це заповнити наступний конфіг:

Щодо уточнень — звертайтесь до розробника через наші канали зв’язку.

Щодо уточнень — звертайтесь до розробника через наші канали зв’язку.

Щодо уточнень — звертайтесь до розробника через наші канали зв’язку.

Щодо уточнень — звертайтесь до розробника через наші канали зв’язку.

</aside>

1. Отримання авторизаційного коду сесії

<aside> <img src="/icons/swap-horizontally_gray.svg" alt="/icons/swap-horizontally_gray.svg" width="40px" /> Щоб отримати авторизаційний код сесії, необхідно надіслати GET запит на ендпоінт /auth/realms/eStock/protocol/openid-connect/auth.

<aside> <img src="/icons/push-pin_gray.svg" alt="/icons/push-pin_gray.svg" width="40px" /> Cпецифікація ендпоінту

Деталі специфікації ендпоінту авторизації через OpenID Connect (OIDC) standard Authorization Endpoint доступні за посиланням.

</aside>

<aside> <img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> Параметри запиту

Параметр Тип Приклад значення Опис
response_type string code Має містити значення code.
client_id string mic-client-test Id клієнта, отриманий для інтеграції з e-Stock API.
state string ZzFWUS5USldrT2FuZEczSjR4bWxfOUl6MUxFcX55VWF6YmZiSjdpdER2VkNB Опціональне поле, може використовуватись для організації внутрішнього управління сесіями на стороні МІС.
redirect_uri string http://localhost:4444/home URL-адреса, на яку сервер автентифікації перенаправляє браузер після того, як e-Stock IAM service авторизує користувача.
scope string openid offline_access profile email
Деталі уточнювати у розробника.
code_challenge string CrLESFHBvJc4EtZB2jUxAm1czMplNhy_JvKB6r-MRTw Деталі уточнювати у розробника.
code_challenge_method string S256 Деталі уточнювати у розробника.
nonce string Y2phWmVrTmVLSGNDdjRXd2FzeWpfZThRbWdWcDNTWTk5TUVOVFZ0T2o0aTha Деталі уточнювати у розробника.
ui_locales string uk Параметр для контролю locale логін сторінки. Альтернатива хедеру ‘Accept-Language’.

Можливі значення: ‘uk’, ‘en’. |

<aside> <img src="/icons/forward_gray.svg" alt="/icons/forward_gray.svg" width="40px" /> Приклад запиту

<https://iam-stage.es.meddata.com.ua/auth/realms/eStock/protocol/openid-connect/auth?response_type=code&client_id=meddata-ui-client&state=Y2phWmVrTmVLSGNDdjRXd2FzeWpfZThRbWdWcDNTWTk5TUVOVFZ0T2o0aTha&redirect_uri=https%3A%2F%2Fdemand-qa.meddata.com.ua%2Fuk%2Frequisitions%2F1026%2Fzoz%2Fpatients&scope=openid%20offline_access%20profile%20email&code_challenge=CrLESFHBvJc4EtZB2jUxAm1czMplNhy_JvKB6r-MRTw&code_challenge_method=S256&nonce=Y2phWmVrTmVLSGNDdjRXd2FzeWpfZThRbWdWcDNTWTk5TUVOVFZ0T2o0aTha&ui_locales=uk>

</aside>

</aside>

</aside>

<aside> <img src="/icons/info-alternate_gray.svg" alt="/icons/info-alternate_gray.svg" width="40px" /> Цей ендпоінт перенаправить користувача на сервер автентифікації e-Stock та, у випадку успішної автентифікації, поверне авторизаційний код на вказаний у запиті редірект URL.

</aside>

2. Отримання токену користувача

<aside> <img src="/icons/swap-horizontally_gray.svg" alt="/icons/swap-horizontally_gray.svg" width="40px" /> Щоб отримати токен користувача, необхідно надіслати отриманий на попередньому кроці авторизаційний код сесії POST запитом на ендпоінт /auth/realms/eStock/protocol/openid-connect/token.

<aside> <img src="/icons/push-pin_gray.svg" alt="/icons/push-pin_gray.svg" width="40px" /> Cпецифікація ендпоінту

Програма повинна відправити запити на ендпоінт напряму, а не через браузер користувача. Деталі специфікації ендпоінту з OpenID Connect (OIDC) доступні за посиланням.

</aside>

<aside> <img src="/icons/arrow-right_gray.svg" alt="/icons/arrow-right_gray.svg" width="40px" /> Параметри заголовку

Параметр Тип Приклад значення Опис
Content-Type string application/x-www-form-urlencoded Має передаватись значення application/x-www-form-urlencoded*.*

Параметри запиту

Параметр Тип Приклад значення Опис
grant_type string authorization_code Має містити значення authorization_code.
code string 30efa04d-e79f-4a1d-82c5-844e6d4130d9.2529a0fa-ab24-4a96-9136-8395f4168fe4.58731e7a-ee90-4266-adc7-207378a1918f Значення яке отримали як результат виклику ендпоінту /auth/realms/eStock/protocol/openid-connect/auth.
client_id string mic-client-test Id клієнта, отриманий для інтеграції з e-Stock API.
client_secret string 2qmLRkBfxdN8TIkfdugAze428MRXYrgt Secret клієнта, отриманий для інтеграції з e-Stock API.
redirect_uri string http://localhost:4444/home URL-адреса, на яку сервер автентифікації перенаправляє браузер після того, як e-Stock IAM service авторизує користувача.. Ммає бути такий саме, як і в запиті /auth/realms/eStock/protocol/openid-connect/auth.

<aside> <img src="/icons/forward_gray.svg" alt="/icons/forward_gray.svg" width="40px" /> Приклад запиту

POST <https://iam-stage.es.meddata.com.ua/auth/realms/eStock/protocol/openid-connect/token&>
                       Content-Type='application/x-www-form-urlencoded'
                       
                       client_id=mic-client-test&
                       grant_type=authorization_code&
                       response_type=code&
                       redirect_uri=http://localhost:4444/home&
                       client_secret=2qmLRkBfxdN8TIkfdugAze428MRXYrgt

</aside>

</aside>

<aside> <img src="/icons/arrow-left_gray.svg" alt="/icons/arrow-left_gray.svg" width="40px" /> Параметри відповіді

У відповіді будуть отримані оновлені авторизаційні токени.

<aside> <img src="/icons/backward_gray.svg" alt="/icons/backward_gray.svg" width="40px" /> Приклад відповіді

HTTP/1.1 200 OK

                           Content-Type: application/json

                           {
                            "access_token":"eyJz9sdfsdfsdfsd...",
                            "refresh_token":"dmcxd329ujdmkemkd349r...",
                            "token_type":"Bearer",
                            "expires_in":3600,
                            "refresh_expires_in":7200,
                             ...
                           }

</aside>

<aside> <img src="/icons/info-alternate_lightgray.svg" alt="/icons/info-alternate_lightgray.svg" width="40px" /> Токен містить таку інформацію, як ім’я та роль користувача, ідентифікатор організації користувача щодо. Для декодування токену користувача можна використовувати сервіс https://jwt.io/:

image.png

</aside>

</aside>

</aside>

<aside> <img src="/icons/light-bulb_gray.svg" alt="/icons/light-bulb_gray.svg" width="40px" /> Також система дозволяє конфігурувати TTL токенів для кожного клієнта індивідуально. Дефолтні TTL для токенів використовуються такі: