Работа с другими сервисами
Сервис smev-data-provider взаимодействует с сервисами, используя очереди Kafka. Сервис поддерживает три топика - запросов, ответов и подписок, где названия топиков указываются в файле настройки. Описание топиков приведено в таблице ниже:
Название | Назначение | Имя параметра | Заголовки сообщений | Шифрование |
---|---|---|---|---|
Очередь запросов | Очередь входящих запросов для поставщика данных | kafka.requestTopic | requestId - идентификатор запроса clientId - идентификатор клиента (keyAlias) namespace - пространство имен запроса rootElement - корневой элемент запроса | ГОСТ 3412 2015 «Кузнечик» |
Очередь ответов | Очередь исходящих ответов от поставщика данных | kafka.responseTopic | requestId - идентификатор запроса clientId - идентификатор клиента (keyAlias) | ГОСТ 3412 2015 «Кузнечик» |
Очередь подписок | Очередь входящих сообщений по подпискам | kafka.broadcastTopic | requestId - идентификатор запроса payloadType - тип бизнес данных clientId - идентификатор клиента (keyAlias) | ГОСТ 3412 2015 «Кузнечик» |
При написании приложения, работающего с smev-data-provider, необходимо выполнить следующие шаги:
- Реализация механизма шифрования/дешифрования сообщений из Kafka с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик». В качестве ключа использовать ключ полученный через REST API "Возвращает ключ шифрования по keyAlias".
- Реализация консьюмера запросов из Kafka, используя информацию из таблицы выше.
- Реализация продюсера ответов в Kafka, используя информацию по топику из таблицы выше.
Примечание
Запрос не будет обработан при отсутствии любого из этих header.
Для ускорения написания java-приложений можно воспользоваться уже готовым encryptionProvider. EncryptionProvider реализует механизм шифрования/дешифрования данных с использованием алгоритма ГОСТ Р 34.12-2015 «Кузнечик».
Для использования encryptionProvider необходимо:
- Подключить зависимость:
<dependency>
<groupId>ru.sberbank.gostech.smev</groupId>
<artifactId>smev-encryption-provider</artifactId>
<version>${актуальная версия}</version>
</dependency>
- Создать бин провайдера:
@Bean
SmevEncryptionProvider smevEncryptionProvider(@Value("${app.encryptionProvider.secretKey}") String secretKey) {
return new GOST3412_2015EngineSmevEncryptionProvider(secretKey);
}
- Добавить в файлы настройки параметры
app.encryptionProvider.secretKey
:
app: encryptionProvider: secretKey: "125f7a7310b8cc27"
- Произвести шифрования или дешифровку данных:
//шифрование сообщения перед отправкой в топик Kafka
//jsonMsg - строка, полученная в результате маппинга API объекта
String cipherText = encryptionProvider.encrypt(jsonMsg);
//расшифровка сообщения, полученного из топика Kafka
//payload - строка, полученная из топика
String msg = encryptionProvider.decrypt(payload);
Основной интерфейс SmevEncryptionProvider описывает методы работы с шифрованием.
Метод | Описание |
---|---|
String encrypt(String text) | Зашифровка текст |
Pair<InputStream, Long> encrypt(InputStream inputStream, Long length) | Зашифровка потока данных. Поток данных inputStream будет закрыт |
String encrypt(String text, String secretKey) | Зашифровка текста с использованием ключа шифрования |
Pair<InputStream, Long> encrypt(InputStream inputStream, Long length, String secretKey) | Зашифровка потока данных с помощью ключа шифрования. Поток данных inputStream будет закрыт |
String decrypt(String cipherText) | Расшифровка текста |
Pair<InputStream, Long> decrypt(InputStream cipherInputStream, Long length) | Расшифровка потока данных. Поток данных cipherInputStream будет закрыт |
String decrypt(String cipherText, String secretKey) | Расшифровка текста с использованием ключа шифрования |
Pair<InputStream, Long> decrypt(InputStream cipherInputStream, Long length, String secretKey) | Расшифровка потока данных с помощью ключа шифрования. Поток данных cipherInputStream будет закрыт |
String generateSecretKey(String keyAlias) | Генерация секретного ключа для шифрования/дешифрования данных |
GOST3412_2015EngineSmevEncryptionProvider - реализация интерфейса SmevEncryptionProvider для работы с алгоритмом ГОСТ 34.12-2015 «Кузнечик».
Конструктор | Описание |
---|---|
public GOST3412_2015EngineSmevEncryptionProvider(String password, String salt) | Создание провайдера с использованием ключа на основе переданных пароля и соли |
public GOST3412_2015EngineSmevEncryptionProvider(String secretKey) | Создание провайдера с использованием переданного ключа |
public GOST3412_2015EngineSmevEncryptionProvider() | Создание провайдера без инициализации ключом шифрования |
В демопримерах реализованы стандартные сценарии, демонстрирующие работу отдельных сервисов Платформы ГосТех. Отправка тестовых запросов в демопримерах позволит вам ознакомиться с функциями того или иного сервиса. Доступные демопримеры и описания реализованной в них функциональности представлены ниже.
СМЭВ
Отправка тестовых запросов в СМЭВ с присвоением успешно отправленным запросам уникальных идентификаторов