Стратегія нечіткого порівняння імені користувача при автентифікації

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

Існує проблема, що атрибут fullName в КЕП що містить ПІП особи є нестандартизованим і заповнюється працівниками АЦСК. Це призводить до того що при перевипуску КЕП або використанні КЕП виданого іншим АЦСК значення можуть не збігатися. Зокрема інший КЕП може містити кілька пробілів замість одного, містити або не містити спеціальні символи такі як апостроф або дефіс.

Такі зміни в атрибуті fullName призводять до того, що користувач не може зайти в кабінет з новим ключем оскільки значення fullName атрибута з КЕП не збігається зі значенням що збережене в БД KeyCloak. В свою чергу в KeyCloak зберігається значення атрибута fullName з КЕП користувача який він використовував при першому логіні в реєєстр (атореєстрації).

Поточна реалізація стратегії автентифікації ("strictIgnoreCase") не враховує дані особливості та працює за принципом приведення стрічки до нижнього регістру та видалення лише символів пробілу.

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

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

  • Отримувачі послуг

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

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

  • Застосування правил нечіткого порівняння повного імені користувача отриманого з КЕП або від зовнішнього IdP зі значенням збереженим в KeyCloak IAM при автентифікації

Стратегія автентифікації користувачів

Автентифікація користувача в компоненті "dso-*-authenticator" відбувається згідно описаної нижче логіки.

Автентифікатор в якості вхідних даних отримує наступні атрибути користувача:

  • drfo: ідентифікаційний номер або серія і номер паспорта особи

  • fullName: ПІП особи

  • edrpou: код організації до якої належить особа

В процесі автентифікації відбувається пошук користувача в БД за атрибутом drfo. Якщо користувача з відповідним атрибутом знайдено, то відбувається порівняння атрибутів fullName та edrpou (в разі наявності).

Якщо порівняння drfo та edrpou відбувається чітким співпадінням (equals) то для fullName необхідно реалізувати наступну логіку ("alphanumericIgnoreCase"):

  • перед порівнянням стрічки приводяться до нижнього регістру

  • видаляються всі символи окрім латинських та кириличних літер та цифр

  • довжина стрічки після нормалізації не може бути менше 50% від оригінальної

Компоненти системи та їх призначення в рамках дизайну рішення

У даному розділі наведено перелік компонент системи, які задіяні або потребують змін/створення в рамках реалізації функціональних вимог згідно з технічним дизайном рішення.

Компонент Службова назва Призначення / Суть змін

Автентифікатор громадян

keycloak-ds-citizen-authenticator

Застосування стратегії нечіткого порівняння повного імені особи при автентифікації

Автентифікатор посадових осіб

keycloak-ds-officer-authenticator

Застосування стратегії нечіткого порівняння повного імені посадової особи при автентифікації

Високорівневий план розробки

Технічні експертизи

  • BE

План розробки

  • Розширення citizen та officer автентифікаторів логікою застосування стратегії нечіткого порівняння імені користувача

  • Розробка інструкцій користувачів