Автентифікація з допомогою КЕП

Модуль представляє собою розширення для Keycloack IAM що імплементує Authentication Service Provider Interfaces (SPI) та надає можливість автентифікації користувачів з допомогою КЕП. Зокрема розширення імплементує org.keycloak.authentication.AuthenticatorFactory та Authenticator інтерфейси де Authenticator визначає логіку а AuthenticatorFactory відповідає за створення екземпляра Authenticator. Для перевірки ЕЦП та отримання інформації про користувача модуль здійснює виклик REST API КЕП сервіса.

Процес автентифікації користуача з допомогою КЕП:

Покрокова схема автентифікації користувача наведена нижче:

Auth Sequence
Diagram
  1. Відправка користувачем запиту на відображення сторінки автентифікації Серверу Авторизації;

  2. Обробка запиту Сервером Авторизації та відправка користувачеві відповіді із вмістом web-сторінки автентифікації та iframe HTML елементом для відображення віджета підпису id.gov.ua;

  3. Відправка бравзером запиту на відображення віджета підпису id.gov.ua;

  4. Обробка запиту сервером id.gov.ua та відправка користувачеві відповіді із вмістом web-сторінки віджета;

  5. Зчитування користувачем власного особистого ключа з використанням відповідної бібліотеки підпису, що включає:

    • зчитування файлу з особистим ключем java-скрипт-бібліотекою чи зчитування ключа з електронного ключа чи іншого носія ключової інформації з використанням пароля захисту;

    • відправку бібліотекою запиту у відповідний АЦСК на отримання ланцюжка сертифікатів користувача за протоколом CMP та отримання відповіді від АЦСК або зчитування сертифіката користувача з наданого файлу чи з постійного файлового сховища, відправку запитів на перевірку статусу сертифікатів у АЦСК за протоколом OCSP і отримання відповідей та завантаження з АЦСК поточних списків відкликаних сертифікатів (СВС) і перевірку статусу сертифікатів з використанням завантажених СВС;

  6. Накладання користувачем КЕП на одноразовий код (nonce) - підпис одноразового коду з використанням відповідної бібліотеки підпису, що включає:

    • відправку бібліотекою запиту до АЦСК на формування мітки часу за протоколом TSP та отримання відповіді від АЦСК із сформованою міткою;

    • формування КЕП з міткою часу з використанням особистого ключа користувача;

  7. Відправка користувачем запиту на автентифікацію із підписаним одноразовим кодом (nonce) методом POST протоколу HTTPS;

  8. Обробка запиту від Користувача Сервером Авторизації та відправка запиту до КЕП Сервісу для перевірки підпису

  9. Перевірка КЕП Сервісом підписаного одноразового коду від Користувача з використанням бібліотеки підпису у вигляді Java бібліотеки і мережного криптомодуля що включає:

    • відправку бібліотекою запиту у АЦСК на пошук та перевірку статусу сертифіката Користувача за протоколом OCSP і отримання відповіді та завантаження від АЦСК поточних СВС і перевірку статусу сертифіката з використанням завантажених СВС;

    • перевірку КЕП з використанням перевіреного сертифіката особистого ключа користувача АЦСК;

    • обрахунок хеш суми одноразового коду та звірку з хешем з підпису

  10. Відправка КЕП Сервісом відповіді з ідентифікаційними даними користувача отриманих з сертифіката Користувача в разі успішного проходження перевірки або відповідної помилки в протилежному випадку;

  11. Прийняття рішення про автентифікацію Користувача в залежності від відповіді КЕП Сервісу що включає пошук користувача за атрибутами (ІНН, ПІБ, …​)

  12. Відправкау (у разі успішної автентифікації) Сервером Авторизації користувачеві відповіді із перенаправленням браузера користувача на сторінку платформи, яка була вказана в якості зворотнього посилання (redirect_uri) під час попереднього перенаправлення на Ссервер Авторизації;

Параметри конфігурації сервісу

Параметр Тип Необхідність Опис

sign.timeout-ms

long

required

дозволений проміжок часу між накладанням підпису та перевіркою

sign.jwt-validation

boolean

required

вмикає перевірку власника JWT токену

Технологічний стек

  • Spring/Spring Boot - програмний каркас з відкритим кодом та контейнери з підтримкою інверсії управління для платформи Java.

  • Spring Cloud Kubernetes - інтеграція з об’єктами Kubernetes інфраструктури ConfigMap/Secrets

  • IIT Digital Signature Java library - бібліотека для створення та перевірки цифрового підпису документа.

  • Maven - управління залежностями