Генерация строк аутентификации (REST API)

Последнее обновление: 31 мар. 2025 г.

Некоторые конечные точки REST позволяют выполнять конфиденциальные операции, такие как размещение ордеров или запрос на вывод цифровых активов. Эти частные конечные точки могут быть вызваны только через зашифрованные запросы, и строка аутентификации (authent) должна быть включена в каждый такой запрос. authent вычисляется из следующих входных данных:

PostData

postData представляет собой конкатенацию "&" в форме <argument>=<value> и является специфичным для каждой конечной точки REST.

Пример

Чтобы использовать конечную точку orderbook, вы выбираете аргумент symbol со значением
fi_xbtusd_180615. postData затем задается как symbol=fi_xbtusd_180615.

Обновление потока аутентификации для конечных точек v3: С 20 февраля 2024 года, чтобы соответствовать лучшим практикам и обеспечить более высокий стандарт безопасности, мы обновим поток аутентификации для наших конечных точек /derivatives/* (v3). (подробности ниже)

Изменения в генерации PostData:


- До выпуска: Пользователи должны были хешировать параметры строки запроса перед URL-кодированием для генерации Authent, например, `greeting=hello world`.


- После выпуска: Процесс аутентификации теперь будет требовать хеширования полного, URL-кодированного компонента URI, как он появляется в запросе, например, `greeting=hello%20world`. Этот метод повышает безопасность и соответствует лучшим практикам.
Это обновление особенно актуально для конечной точки v3 batchorder, которая принимает тело JSON в своих параметрах запроса.


Обратная совместимость и планы на будущее:


В настоящее время это изменение обратно совместимо. Платформа будет принимать оба описанных выше метода генерации PostData. Однако в будущем мы планируем отказаться от старого метода (хеширование декодированных параметров строки запроса) для поддержания высочайших стандартов безопасности. Мы заблаговременно уведомим об этом изменении и настоятельно рекомендуем всем пользователям как можно скорее перейти на новый метод для обеспечения бесперебойной работы сервиса.

Nonce

nonce — это постоянно увеличивающийся целочисленный параметр. Хорошим значением nonce является системное время в
миллисекундах (в строковом формате). Наша система допускает несовпадающие nonce в течение короткого периода времени. Nonce не является обязательным.

Пример 1415957147987

Многие проблемы аутентификации связаны с некорректным nonce. Новая пара ключей API автоматически сбросит nonce и решит эти проблемы.

Путь конечной точки

endpointPath Это расширение URL конечной точки.

Пример /api/v3/orderbook

Секрет API

api_secret получается, как описано в предыдущем разделе.

Пример

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

На основе этих входных данных authent необходимо вычислить следующим образом:

  1. 1

    Объедините

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Хэшируйте результат шага 1 с помощью алгоритма SHA-256

  3. 4

    Используйте результат шага 3 для хэширования результата шага 2 с помощью алгоритма HMAC-SHA-512

  4. 5

    Кодируйте Base64 результат шага 4

Пример

Ниже показана реализация authent на Java. Полные рабочие примеры на разных языках программирования см. в разделе Дополнительные ресурсы. public static String getAuthent(String postData, String nonce, String endpointPath, String secretKeyBase64)
{
Mac mac512;
MessageDigest sha256;
try {
SecretKey secretKey = new SecretKeySpec 
(Base64.decode(secretKeyBase64.getBytes()), HMAC_SHA_512);
mac512 = Mac.getInstance(HMAC_SHA_512);
mac512.init(secretKey);
sha256 = MessageDigest.getInstance("SHA-256");
} catch (IOException e) {
...
} catch (InvalidKeyException e) {
...
} catch (NoSuchAlgorithmException e) {
...
} sha256.update(postData.getBytes());
sha256.update(nonce.getBytes());
sha256.update(endpointPath.getBytes());
mac512.update(sha256.digest());
return Base64.encodeBytes(mac512.doFinal()).trim();
}

Нужна дополнительная помощь?