Робота з цифровим підписом
| 🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. | 
1. Основні сценарії
1.1. Перевірка цифрового підпису накладеного чиновником
Діаграма послідовності перевірки підпису:
Ланцюг валідаційних перевірок реалізовано в наступних классах:
Сервісом здійснюються наступні перевірки підпису чиновника:
- 
ЕЦП дійсний 
- 
ЕЦП містить мітку часу 
- 
різниця в часі між моментом накладання підпису та поточним часом не перевищує значення заданого в timeout-ms параметрі, за замовчуванням 2 хвилини (120 000 ms) 
- 
цілісність даних непорушена (Значення хеша з підпису відповідає хешу порахованому сервісом на основі отриманих даних) 
- 
документ був підписаний ключем, який належить автентифікованому користувачу що його використовує. Дані користувача з ЕЦП відповідають даним в JWT токені доступу та містять ПІБ, РНОКПП, ЄДРПОУ. 
Запит:
POST /api/esignature/officer/verify --header 'X-Access-Token: token'Тіло запиту:
{
    "signature": "string",
    "data": "string"
}Відповіді:
- 
200 OK Підпис валідний 
Тіло відповіді:
{
    "isValid": true,
    "error": null
}- 
200 OK Помилка перевірки підпису 
Тіло відповіді:
{
    "isValid": false,
    "error": {
        "code": "ERROR_EMPTY_EDRPOU",
        "message": "Signature does not contain EDRPOU",
        "localizedMessage": "Підпис не містить ЄДРПОУ код"
    }
}- 
400 Bad request Невалідний запит 
Тіло відповіді:
{
    "code": "string",
    "message": "string",
    "localizedMessage": "string"
}1.2. Перевірка цифрового підпису накладеного громадянином
Діаграма послідовності перевірки підпису:
Ланцюг валідаційних перевірок реалізовано в наступних классах:
Сервісом здійснюються наступні перевірки підпису громадянина:
- 
ЕЦП дійсний 
- 
ЕЦП містить мітку часу 
- 
ЕЦП належить фізичній особі - містить ПІБ і РНОКПП та не містить ЄДРПОУ 
- 
JWT токен належить фізичній особі, містить ПІБ і РНОКПП та не містить ЄДРПОУ 
- 
різниця в часі між моментом накладання підпису та поточним часом не перевищує значення заданого в timeout-ms параметрі, за замовчуванням 2 хвилини (120 000 ms) 
- 
цілісність даних непорушена (Значення хеша з підпису відповідає хешу порахованому сервісом на основі отриманих даних) 
- 
документ був підписаний ключем, який належить автентифікованому користувачу що його використовує (дані користувача з ЕЦП відповідають даним в JWT токені доступу) 
Запит:
POST /api/esignature/citizen/verify --header 'X-Access-Token: token'Тіло запиту:
{
  "allowedSubjects": ["CITIZEN"],
  "signature": "string",
  "data": "string"
}allowedSubjects - пакет валідаційних правил для перевірки підпису, може містити [ CITIZEN, ENTREPRENEUR, LEGAL ]. У разі використання декількох правил підпис є валідним, якщо пройшла хоч одна з перевірок. В разі непрохдження перевірок по жодному з пакетів, повертається перша знайдена помилка. Перевірка для ENTREPRENEUR та LEGAL відбувається за допомогою валідатора того ж що й для чиновника.
Відповіді:
- 
200 OK Підпис валідний 
Тіло відповіді:
{
    "isValid": true,
    "error": null
}- 
200 OK Помилка перевірки підпису 
Тіло відповіді:
{
    "isValid": false,
    "error": {
        "code": "ERROR_SIGNATURE_NAME_MISMATCH",
        "message": "Signature and current user full name mismatch",
        "localizedMessage": "ПІБ підпису та користувача відрізняються"
    }
}- 
400 Bad request Невалідний запит 
Тіло відповіді:
{
    "code": "string",
    "message": "string",
    "localizedMessage": "string"
}1.3. Отримання данних про власника підпису
Отримання інформації, ким було накладено підпис відбувається шляхом перевірки чинності підпису з урахуванням дозволеного проміжку часу заданого в sign.auth.timeout-ms параметрі, за замовчуванням 1 хвилина (60 000 ms) Запит:
POST /api/esignature/owner --header 'X-Access-Token: token'Тіло запиту:
{
  "signature": "string",
  "data": "string"
}Відповіді:
- 
200 OK Підпис перевірено та отримано дані про підписуючого 
Тіло відповіді:
{
  "fullName": "string",
  "drfo": "string",
  "edrpou": "string"
}