Перейти к навигации

Agent SDK Секреты и HMAC подписание

Защитите учетные данные агента API и поймите, как SDK генерирует устойчивые к воспроизведению подписи запросов HMAC-SHA256.

Просмотр в формате Markdown

Запросы Agent SDK аутентифицируются с помощью секрета партнера API. Храните этот секрет в доверенной внутренней службе и позволяйте SDK генерировать поля подписи, когда это возможно.

Два протокола подписания

При подписании Agent SDK используются отсортированные поля запроса, временная метка в секундах и одноразовый номер. Прямые запросы Developer API используют отдельный процесс, описанный в разделе Запрос на подписание. Не используйте повторно один формат полезной нагрузки для другого.

Правило подписи

Для запросов Agent SDK:

  1. Исключите поле sign.
  2. Пропускать поля с пустыми значениями.
  3. Отсортируйте оставшиеся имена полей в порядке ASCII.
  4. Объедините поля как k=v&k2=v2.
  5. Вычислите шестнадцатеричную подпись HMAC-SHA256 с помощью apiSecret.

Значения массива сериализуются как компактные JSON перед присоединением к подписывающим полезным данным. Например, platformUserIds обозначается как ["1188041528"], что дает platformUserIds=["1188041528"] в полезных данных k=v . Сохранять порядок элементов массива, двойные кавычки и идентификаторы строк; не вставляйте пробелы форматирования и не используйте Java List.toString() (например, [1188041528]). SDK автоматически обрабатывает эту сериализацию.

SDK должен построить это значение на основе тех же данных, которые он отправляет. Изменение подписанного поля после создания подписи приводит к сбою проверки.

Поля, управляемые SDK

ПолеИсточникОписание
agentCodeSDK конфигКод агента-партнера.
временная меткаТекущее время сервераВременная метка Unix в секундах.
одноразовый номерБезопасное случайное значениеСлучайная строка для защиты от повторного воспроизведения.
знакHMAC-SHA256Запросить подпись.
валютаВалюта по умолчаниюИспользуется, когда в переводе/счете APIs отсутствует валюта.

Секретное хранилище

  • Загрузите apiSecret из внутреннего секретного менеджера или защищенной конфигурации среды выполнения.
  • Никогда не размещайте секрет в пакетах внешнего интерфейса, мобильных приложениях, клиентах для настольных компьютеров, скриншотах или обращениях в службу поддержки.
  • Храните учетные данные для разработки, подготовки и производства отдельно.
  • Ограничьте доступ к сервисам и операторам, которые этого требуют.
  • Редактировать подписи запросов, значения авторизации и секреты из журналов.
  • Отозвать и заменить учетные данные при подозрении на заражение.

Защита часов и повторов

SDK включает timestamp и nonce для снижения риска повторного воспроизведения. Синхронизируйте внутренние часы и не используйте повторно созданный вручную одноразовый номер. Если проверка подписи не удалась, перед повторной попыткой подтвердите настроенный секрет, время сервера, сериализованные поля и среду.

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

ПроверятьОжидаемый результат
Секретная локацияСекретное хранилище только для серверной части.
СредаБаза URL и учетные данные принадлежат одной среде.
Обработка полейSDK генерирует timestamp, nonce и sign.
Ведение журналаБизнес-идентификаторы остаются видимыми, пока учетные данные редактируются.
ВращениеВладелец учетных данных и процесс замены документированы.

Связанные документы по безопасности