Автентифікація посадових осіб, єдина для групи реєстрів завдяки ручним налаштуванням

Загальний опис

При роботі посадової особи в декількох реєстрах, які по своїй природі є спорідненими, виникає потреба виконувати автентифікацію в кожен кабінет окремо використовуючи для цього один і той самий ключ, але виконуючи логін в різних кабінетах. Для спрощення досвіду користувача необхідно розробити підхід для забезпечення SSO в рамках групи реєстрів для мінімізації однотипних дій користувача.

Функціональні сценарії

  • Створення Федерації споріднених реєстрів для SSO адміністратором платформи

  • Налаштування SSO для Федерації споріднених реєстрів адміністратором платформи

  • Автентифікація посадової особи в кабінет за допомогою ключа

  • Автентифікація посадової особи в кабінет за допомогою id.gov.ua

  • Автореєстрація посадової особи

  • Створення користувачів адміністратором реєстру через Підсистему управління користувачами та ролями

  • Створення користувачів адміністратором реєстру через Підсистему моделювання регламенту реєстру (імпорт csv файлу)

  • Налаштування ролей користувачів адміністратором реєстру

  • Налаштування атрибутів користувачів адміністратором реєстру

Ролі користувачів

  • Адміністратор платформи

  • Адміністратор реєстру

  • Адміністратор Федерації споріднених реєстрів

  • Посадова особа

Загальні принципи та положення

  • Споріднені реєстри мають спільну базу користувачів посадових осіб

  • Посадова особа повинна виконувати логін 1 раз коли працює в Споріднених реєстрах

  • Рішення повинно максимально бути побудовано на ручних налаштуваннях по інструкції

  • До Федерації споріднених реєстрів можуть бути підключені як нові реєстри, так і існуючі реєстри з власною базою користувачів

  • Налаштування ролей посадових осіб виконується на рівні Ріалму реєстру федерації

  • Налаштування ідентифікуючих системних атрибутів (fullName, edrpou, drfo) виконується на рівні Мастер-ріалму федерації споріднених реєстрів

  • Налаштування додаткових атрибутів виконується на рівні Ріалму реєстру федерації

  • Мастер-ріалм федерації споріднених реєстрів підтримує режим автореєстрації посадових осіб

  • Мастер-ріалм федерації споріднених реєстрів підтримує інтеграцію з id.gov.ua для автентифікації посадових осіб

  • Identity provider link - посилання в обліковому записі посадової особи в Ріалмі реєстру федерації на обліковий запис в Мастер-ріалмі федерації споріднених реєстрів

  • При перестворені облікового запису в Мастер-ріалмі федерації споріднених реєстрів при існуючому Identity provider link в Ріалмі реєстру федерації обліковий запис в Ріалмі реєстру федерації повинен бути оновлени з новим Identity provider link

  • Адміністратор Федерації споріднених реєстрів виконує налаштування SSO для Федерації споріднених реєстрів та має адмін доступ на Мастер-ріалм федерації споріднених реєстрів

  • Права Адміністратору Федерації споріднених реєстрів надає Адміністратор платформи в ручному режимі в Підсистемі управління користувачами та ролями

  • Налаштування автентифікації у Підсистемі управління Платформою та реєстрами не підтримуються при ручних налаштуваннях Федерації споріднених реєстрів

  • Всі ручні налаштування повинні бути зроблені у відповідних Helm чартах реєстрів. Налаштування Мастер-ріалм федерації споріднених реєстрів повинно бути занесено в один зі Споріднених реєстрів.

  • Keycloak Client CR в Мастер-ріалмі федерації споріднених реєстрів задається на рівні helm chart Ріалму реєстру федерації. Для цього Адміністратор платформи повинен додати відповідні права SA (Keycloak Client CR) з назвою <registry-name>-admin в проекті user-management.

Детальніше з концептами та принципами Федерації споріднених реєстрів можна ознайомитися за посиланням Федерація споріднених реєстрів

Високорівневий дизайн рішення

Компонентна діаграма

component

Компонент Назва Тип Розташування Опис

Identity Provider

federation-idp

keycloak-oidc

Реєстровий ріалм

Інтеграція з мастер ріалмом для ідентифікації

Authenticator Execution

federation-idp

Identity Provider Redirector

Реєстровий ріалм / Authentication dso-officer-auth-flow

У конфігурації налаштовується ідентіті провайдер federation-idp за замовчуванням

Identity Provider Mapper

fullName

Attribute Importer

Реєстровий ріалм / Identity Provider federation-idp

Імпорт атрибута fullName з мастер ріалму при автентифікації користувача

Identity Provider Mapper

drfo

Attribute Importer

Реєстровий ріалм / Identity Provider federation-idp

Імпорт атрибута drfo з мастер ріалму при автентифікації користувача

Identity Provider Mapper

edrpou

Attribute Importer

Реєстровий ріалм / Identity Provider federation-idp

Імпорт атрибута edrpou з мастер ріалму при автентифікації користувача

Realm

registry-federation-<group-name>

Realm

Keycloak

Мастер Ріалм для спільного управління користувачами споріднених реєстрів та SSO. <group-name> - назва обрана для спільної групиреєстрів

Client

<registry-name>-client

openid-connect

registry-federation-<group-name> Realm

Клієнт для інтеграції реєстровий ріалм - мастер ріалм. Конфігурація повинна бути погоджена з налаштуванням Identity Provider federation-idp в реєстровому ріалмі (client id, client secret, redirect uri). <registry-name> - назва реєстру в федерації

Client Scope

dso-identity

openid-connect

registry-federation-<group-name> Realm

Client Scope для одноразового налаштування мапперів fullName, drfo, edrpou з мастер ріалму. Створений client scope необхідно вказати як client scope за замовчуванням (Default Client Scopes)

Client Scope Mapper

fullName

User Attribute

registry-federation-<group-name> Realm / Client Scope dso-identity

Створюється для мапінгу атрибута fullName з мастер ріалму

Client Scope Mapper

drfo

User Attribute

registry-federation-<group-name> Realm / Client Scope dso-identity

Створюється для мапінгу атрибута drfo з мастер ріалму

Client Scope Mapper

edrpou

User Attribute

registry-federation-<group-name> Realm / Client Scope dso-identity

Створюється для мапінгу атрибута edrpou з мастер ріалму

Authentication

dso-officer-auth-flow

Top Level Flow / generic

registry-federation-<group-name> Realm

Створюється з аналогічними налаштуваннями як і в реєстровому ріалмі для dso-officer-auth-flow. Примітка: dso-officer-auth execution повинен бути з вимкненим Required типом або під обгорткою Authentication Flow з типом Alternative для можливості первинної перевірки по Cookie та SSO

Authentication

federation-idp first broker login

Top Level Flow / generic

Реєстровий ріалм

Authentication flow для першого входу через federation-idp. Повинен бути вибраний як first broker login в налаштуваннях Identity Provider federation-idp

Authenticator Execution

registry-federation-authenticator

registry-federation-authenticator

Реєстровий ріалм / Authentication federation-idp first broker login

Автентифікатор для обробки першого входу через мастер ріалм. Потребує додаткової розробки

Діаграма діяльності registry-federation-authenticator

activity

Приклад можливого видалення idp provider link
  @Override
  protected void authenticateImpl(
      AuthenticationFlowContext context,
      SerializedBrokeredIdentityContext serializedCtx,
      BrokeredIdentityContext identityContext) {
    // delete existing identity provider link for user
    context.getSession().users().removeFederatedIdentity(context.getRealm(), context.getUser(), identityContext.getIdpConfig().getAlias());
    ...
    }

Конфігурація registry-federation-authenticator

Назва Тип Опис

Alias

String

Назва конфігурації

Enable officer auto registration

Boolean

Параметр для включення режиму автореєстрації посадових осіб

Default role for officer auto registration

Array of Strings

Перелік ролей для автореєстрації посадових осіб

При використанні Identity Provider першим логіном вважається ситуація коли у жодному обліковому записі реєстрового реалму не знайдений identity provider link на обліковий запис в мастер ріалмі

Обсяг робіт

Попередня декомпозиція

  • Розробка registry-federation-authenticator (розширення AbstractIdpAuthenticator) з випуском нової версії Кейклоак

  • Розробка інструкцій для ручних налаштувань Федерації споріднених реєстрів з наступним сценарієм:

    • Реєстри нові (користувачів в Ріалмах реєстру федерації ще немає)

    • Автентифікація в Мастер-ріалм федерації споріднених реєстрів виконується по підпису

    • Користувачі повинні бути попередньо створені в Мастер-ріалм федерації споріднених реєстрів в Підсистемі управління користувачами та ролями (без імпорту через csv файл)

    • На рівні Ріалму реєстру федерації налаштована автореєстрація

    • Налаштування атрибутів та ролей відбувається на рівні Ріалму реєстру федерації після першого логіну користувача

Обмеження рішення

  • Більшість налаштувань виконується вручну

  • При помилці в Ріалмі реєстру федерації буде показана стандартна сторінка Кейклоак з помилкою

  • Створення користувачів відбувається в ручному режимі Мастер-ріалм федерації споріднених реєстрів в Підсистемі управління користувачами та ролями

  • Імпорт користувачів через файл може бути виконаний тільки на Ріалму реєстру федерації

  • При вході в кабінет немає можливості обрати, чи виконати логін в Ріалмі реєстру федерації чи в Мастер-ріалм федерації споріднених реєстрів

Додаткові задачі на технічний борг

  • Зробити можливість вибору режиму ALTERNATIVE для execution з типом dso-officer-auth-flow

  • IdGovUaOfficerAuthenticator. При включеній автореєстрації і випадку, коли буде знадено за атрибутами більше ніж одного користувача, буде створено ще одного користувача

  • Переробити підхід до призначення ролей за замовчуванням на стандартний замість логіки в автентифікаторах

  • Перейти на единий автентифікатор по обробці першого входу через idp для всіх кейсів

  • IdGovUaOfficerAuthenticator. При генерації помилки перекидає на сторінку з dso автентифікатором навіть якщо за замовчуванням стоїть idp id.gov.ua