Generați șiruri de autentificare (REST API)

Ultima actualizare: 31 martie 2025

Unele REST endpoints permit efectuarea de operațiuni sensibile, cum ar fi plasarea de ordine sau solicitarea unei retrageri de active digitale. Aceste private endpoints pot fi, prin urmare, apelate doar prin cereri criptate, iar un authentication string (authent) trebuie inclus în fiecare astfel de cerere. authent este calculat din următoarele intrări:

PostData

postData este o concatenare "&" sub forma <argument>=<value> și este specifică fiecărui REST endpoint.

Exemplu

Pentru a opera endpoint-ul orderbook, alegeți argumentul symbol cu valoarea
fi_xbtusd_180615. postData este apoi dat de symbol=fi_xbtusd_180615.

Actualizare Authentication Flow pentru v3 endpoints: Începând cu 20 februarie 2024, pentru a ne alinia la cele mai bune practici și a asigura un standard de securitate mai înalt, vom actualiza authentication flow pentru /derivatives/* (v3) endpoints. (detalii mai jos)

Modificări în generarea PostData:


- Înainte de lansare: Utilizatorii trebuiau să hash-uiască query string parameters înainte de url-encoding pentru generarea Authent, de ex., `greeting=hello world`.


- După lansare: Procesul de autentificare va necesita acum hash-uirea componentei URI complete, url-encoded, așa cum apare în cerere, de ex., `greeting=hello%20world`. Această metodă îmbunătățește securitatea și se aliniază cu cele mai bune practici.
Această actualizare este relevantă în special pentru v3 batchorder endpoint, care acceptă un JSON body în query parameters.


Compatibilitate inversă și planuri de viitor:


Deocamdată, această modificare este compatibilă invers. Platforma va accepta ambele metode de generare PostData descrise mai sus. Cu toate acestea, ne propunem să eliminăm treptat vechea metodă (hash-uirea decoded query string parameters) în viitor pentru a menține cele mai înalte standarde de securitate. Vom oferi o notificare amplă înainte de această modificare și încurajăm cu tărie toți utilizatorii să treacă la noua metodă cât mai curând posibil pentru a asigura continuitatea fără probleme a serviciului.

Nonce

nonce este un parametru întreg care se incrementează continuu. Un nonce bun este timpul sistemului dumneavoastră în
milisecunde (în format șir de caractere). Sistemul nostru tolerează nonce-uri care nu sunt în ordine pentru o scurtă perioadă de timp. Nonce nu este obligatoriu.

Exemplu 1415957147987

Multe probleme de autentificare sunt legate de nonce incorect. O nouă pereche de API keys va reseta automat nonce-ul și va rezolva aceste probleme.

Endpoint Path

endpointPath Aceasta este extensia URL a endpoint-ului.

Exemplu /api/v3/orderbook

API Secret

api_secret este obținut conform descrierii din secțiunea anterioară.

Exemplu

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Pe baza acestor intrări, authent trebuie calculat după cum urmează:

  1. 1

    Concatenare

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Hash-uiți rezultatul pasului 1 cu algoritmul SHA-256

  3. 3

    Decodificați Base64 api_secret-ul dumneavoastră

  4. 4

    Folosiți rezultatul pasului 3 pentru a hash-ui rezultatul pasului 2 cu algoritmul HMAC-SHA-512

  5. 5

    Codificați Base64 rezultatul pasului 4

Exemplu

Următorul exemplu prezintă o implementare a authent în Java. Pentru exemple complete funcționale în diferite limbaje de programare, consultați Secțiunea Resurse suplimentare. 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();
}

Ai nevoie de mai mult ajutor?