Генерація рядків автентифікації (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. 3

    Base64-декодуйте ваш api_secret

  4. 4

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

  5. 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();
}

Потрібна додаткова допомога?