ЕСОЗ - публічна документація

UA_PIS. Patient sign-up validation

Мета

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

Ключові положення

  1. Цей метод має використовуватися лише інтерфейсом Auth

  2. Перевіряє підписаний вміст, а також дані jwt і пацієнтів у ньому

  3. Генерує токен сессії (jwt) для підтвердження запиту на реєстрацію

Специфікація

Apiary

Перевірити підписаний контент

  • Перевірити, що signed_content та signed_content_encoding вказані

    • в разі помилки - повернути 422 ('required property signed_content was not present' or ‘required property signed_content_encoding was not present')

  • Перевірити, що поле signed_content це валідний рядок base64

    • в разі помилки - повернути 422 ('Invalid signed content')

  • Перевірити, що значення поля signed_content_encoding рівне 'base64'

    • в разі помилки - повернути 422 ('value is not allowed in enum')

  • Перевірити, що цифровий підпис валідний

    • в разі помилки - повернути 401 з текстом помилки по перевірці цифрового підпису

  • Перевірити, що drfo з цифрового підпису належить персоні з запиту на реєстрацію, на основі формату поля:

    • якщо поле рівне tax_id з врахуванням regexp (^[0-9]{10}$), поле містить tax_id, використовувати поле tax_id з запиту на реєстрацію для порівняння;

    • якщо зачення рівне номеру national_id з врахуванням regexp (^[0-9]{9}$), поле містить номер national_id, використовувати поле documents.number з documents.type = 'NATIONAL_ID' для порівняння;

    • якщо значення містить хоча б одну літеру, виконати зворотну транслітерацію поля використовуючи існуючий алгоритм (описаний тут), потім перевірити, що це значення рівне номеру паспорта з врахуванням regexp (^((?![ЫЪЭЁ])([А-ЯҐЇІЄ])){2}[0-9]{6}$), якщо рівне, поле містить номер паспорта, використати поле documents.number з documents.type = 'PASSPORT' для порівняння;

      • в разі помилки - повернути 409 ('Registration person and person that sign should be the same')

  • Перевірити, що last_name з цифрового підпису належить персоні з запиту на реєстрацію, поле last_name

    • в разі помилки - повернути 422 ('Input name doesn't match name from digital signature')

  • Перевірити, що поле first_name з запиту на реєстрацію вказано в рядку given_name з цифрового підпису

    • в разі помилки - повернути 422 ('Input name doesn't match name from digital signature')

Перевірити запит на реєстрацію

Перевірити JWT

  • перевірити підпис JWT

  • перевірити емітента (iss = Ehealth)

  • перевірити строк дії (exp у майбутньому)

    • в разі будь-якої помилки - повернути 401 ('JWT is invalid')

Сервісна логіка

Generate JWT

  1. Отримтаи значення JWT TTL з параметру JWT_LOGIN_TTL (в хвилинах).

  2. Отримати поле signed_content та розрахувати хеш MD5.

  3. Згенерувати JWT з наступними параметрами:

    1. alg = RS512

    2. aud = pis-registration

    3. content_hash = MD5 хеш з поля signed_content

    4. exp = iat + JWT_LOGIN_TTL

    5. iat = now()

    6. iss = EHealth

    7. jti = згенерований uuid з JWT

    8. nbf = now() - 1 секунда

    9. sub = content_hash

    10. typ = access

Відобразити дані персони

Відобразити дані персони (пацієнта) у відповідності до специфікації

ЕСОЗ - публічна документація