Интеграция с API «Честный знак»

Расскажем немного о процессе прохождения авторизации в ГИС МДЛП в python-приложении.
Заказчик:
Производитель лекарственных препаратов
Задача:
Разработка интеграционного модуля для API системы «Честный Знак» МДЛП (Мониторинг движения лекарственных препаратов). Все запросы в API должны шифроваться по ГОСТ Р 34.10-2012.
Результат:

Разработали страницу, где пользователь вводит данные для авторизации и выбирает из списка нужный сертификат. Приложение получает и подписывает ключ аутентификации с помощью плагина и вместе с данными для авторизации отправляет подписанный ключ для получения токена авторизации.

Задача

Разработка интеграционного модуля для API Честный Знак МДЛП (Мониторинг движения лекарственных препаратов). Сама документация API честного знака, хоть и не идеальна, но в целом вопросов не вызывает. В процессе разработки у нас возникло две основные проблемы: Авторизация в системе выполняется с использованием УКЭП (Усиленная квалифицированная электронная подпись).

Все запросы в API должны шифроваться по ГОСТ Р 34.10-2012 Опыта работы по авторизации с использованием УКЭП у нас не было. А про сертификат ГОСТ Р 34.10-2012 мы вообще слышали впервые, поэтому изначально чёткой картины реализации клиента к API честного знака не было.

Решение

Шифрование по ГОСТ Р 34.10-2012

Мы начали исследовать проблематику использования ГОСТ-алгоритмов шифрования. Наше приложение работает в Docker контейнере, поэтому основной задачей было найти способ создавать docker-образ с установленными шифрами ГОСТ. 


«Использование docker-контейнеров при разработке является у нас стандартной практикой при разработке и передаче заказчику, для облегчения операций развертывания и масштабирования приложений. Это сильно упрощает работу системным администраторам и разработчикам.» 

В результате исследования. Мы нашли и изучили подходящее решение, разработав на его основе своё. Так же нам необходимо было настроить использование новых шифров в питоне, точнее чтобы библиотека requests использовала нужные нам шифры.

Перечисляем список нужных шифров:

Пишем кастомный адаптер, который будет использовать эти шифры:

 

Теперь сессии будем создавать с использованием этого адаптера:


Теперь и у питона появился доступ к API честного знака!

 

Авторизация в системе выполняется с использованием УКЭП

Процесс авторизации в API выглядит следующим образом:

  1. Получаем код аутентификации
  2. Подписываем код аутентификации электронной подписью
  3. Отправляем подписанный код, получаем в ответ токен авторизации

В идеале нужно, чтобы авторизация происходила автоматически, и пользователю не приходилось ничего делать. В таком случае клиенту пришлось бы давать нам доступ к своей УКЭП, а это очень небезопасно. Мы предложили не очень удобный, но более безопасный вариант: в нашем приложении будет страничка, где пользователь будет вводить данные для авторизации (секретный ключ и т.п.) и выбирать сертификат, которым нужно подписать код аутентификации.

Интеграция с API Честного знака (МДЛП) 1

Для авторизации на сайте самого честного знака требуется браузерное расширение КриптоПро CSP, поэтому следующим шагом было научиться его использовать, в официальной документации КриптоПро CSP мы нашли демо-страничку, где можно протестировать создание подписи, на основе которой мы смогли разобраться с примером использования расширения в собственном приложении.

На текущий момент исследование этой странички уже не актуально, так как появилась специальная библиотека для работы с расширением КриптоПро, это будет в разы более удобный вариант.

Результат

В итоге получилась страничка, где пользователь вводит данные для авторизации и выбирает из списка нужный сертификат. Приложение получает и подписывает ключ аутентификации с помощью плагина, и вместе с данными для авторизации отправляет подписанный ключ для получения токена авторизации.

Мы смогли реализовать авторизацию с помощью ГОСТ-шифрования в МДЛП с помощью python и java script и получили возможность для работы с API.

Ещё статьи и кейсы

Все статьи

Мы готовы начать,

теперь дело за вами

Оставьте заявку, расписав ваши задачи.
Наш менеджер свяжется с вами в ближайшее время.
Хочешь
присоединиться к нам?
Мы готовы предложить лучшие
условия на рынке
Откликнуться

      Начать сотрудничество

        Отправить резюме

          Оставить заявку

          Ваша заявка принята!
          Перезвоним вам в ближайшее время
          Резюме успешно отправлено!
          Перезвоним вам в ближайшее время