🔐 Руководство по интеграции API-ключа RS-Imzo

Этот документ объясняет, как интегрировать вашу систему с RS-Imzo, используя аутентификацию по API-ключу для подписания и проверки электронных документов.


🧩 Обзор

Интеграция с RS-Imzo позволяет сторонним системам:

  • Зарегистрироваться и получить API-ключ и публичный ключ
  • Подтвердить регистрацию домена с помощью публичного ключа (frontend)
  • Использовать API-ключ (backend) для проверки PKCS#7-подписей, объединения или аутентификации

🧱 Этапы интеграции

  1. Вход в кабинет RS-Imzo
    • Перейдите в кабинет вашей организации в системе RS-Imzo.
    • Откройте раздел API Интеграция.
    • Зарегистрируйтесь для интеграции API.
  2. Получение ключей
    • После регистрации вы получите:
      • Публичный ключ — используется на фронтенде для проверки домена.
      • API-ключ — используется на бекенде для работы с подписями.

⚙️ Интеграция Backend

После того как фронтенд получает PKCS#7-подпись, бекенд использует API RS-Imzo, чтобы выполнять проверку подписи, объединение подписей и аутентификацию, используя стандарт PKCS#7.

Базовый URL

$base_url=https://api.rs-imzo.uz/api/v1/backend

⚙️ Точки API

МетодЭндпоинтОписание
POST/pkcs7/verifyПроверить PKCS#7 подпись
POST/pkcs7/mergeОбъединить две PKCS#7 подписи
POST/authАутентифицировать и извлечь данные пользователя

🧩 Заголовки

Все запросы требуют следующих заголовков:

ЗаголовокОписание
X-API-KEYУникальный API-ключ вашей организации
Content-TypeВсегда application/x-www-form-urlencoded

Пример:

X-API-KEY: your-api-key
Content-Type: application/x-www-form-urlencoded

🧾 Параметры запроса

ПолеТипОписание
pkcs7stringPKCS#7 подпись в Base64
detachedDatastring(Опционально) Отдельные данные, если есть

🧾 Информация об объекте ответа

ПолеТипОписание
datastringДанные, подписанные пользователем (в Base64)
detachedbooleanУказывает, используется ли подпись как attached или detached
signersList<Signer>Список подписантов в PKCS#7
certificateObjectИнформация о пользователе, издателе, валидности и др.
digeststringПодписанное содержимое в формате md5
signed_timedateВремя подписи
verifiedbooleanУказывает, прошла ли подпись проверку
issuerObjectОбъект с данными издателя подписи
serialstringУникальный идентификатор подписи
subjectObjectОбъект с данными пользователя
validityObjectСрок действия подписи
CstringСтрана издателя или субъекта
CNstringПолное имя владельца подписи
OstringНазвание организации
1.3.6.1.4.1.64375.1.2stringПИНФЛ владельца подписи
1.3.6.1.4.1.64375.1.1stringИНН организации
not_afterdateДействительна до этой даты
not_beforedateДействительна с этой даты

💻 Пример на Java

Ниже приведён пример использования API RS-Imzo в стиле Java с использованием RestTemplate из Spring. (Код полностью совпадает с англоязычным примером, изменены только комментарии.)


🧩 Контрольный список интеграции

  1. ✅ Получите X-API-KEY у администратора RS-Imzo.
  2. ✅ Реализуйте сервис RSImzoClient.
  3. ✅ Протестируйте API verify, merge, auth в вашем приложении.
  4. ✅ Логируйте все неудачные попытки верификации.

🧠 Итог

КомпонентНазначениеАутентификация
FrontendПроверка доменаAuthorization: Bearer <PUBLIC_KEY>
BackendПроверка, объединение или аутентификация PKCS#7X-API-Key: <API_KEY>

🔒 Примечания

  • Никогда не раскрывайте API-ключ на фронтенде.
  • Публичный ключ можно использовать только для клиентской валидации.
  • PKCS#7 — это контейнер подписи, он не должен изменяться между проверкой и объединением.
  • Если верификация не проходит, убедитесь, что:
    • apiKey принадлежит правильной организации.
    • Подпись не была изменена или не истек срок её действия.