Genera stringhe di autenticazione (REST API)

Ultimo aggiornamento: 31 mar 2025

Alcuni endpoint REST consentono di eseguire operazioni sensibili come l'inserimento di ordini o la richiesta di un prelievo di asset digitali. Questi endpoint privati possono quindi essere richiamati solo tramite richieste crittografate e una stringa di autenticazione (authent) deve essere inclusa in ogni richiesta. authent viene calcolato dai seguenti input:

PostData

postData è una concatenazione "&" nella forma <argomento>=<valore> ed è specifica per ogni endpoint REST.

Esempio

Per operare l'endpoint orderbook si sceglie l'argomento symbol con valore
fi_xbtusd_180615. postData è quindi dato da symbol=fi_xbtusd_180615.

Aggiornamento del flusso di autenticazione per gli endpoint v3: A partire dal 20 febbraio 2024, per allinearci alle migliori pratiche e garantire uno standard di sicurezza più elevato, aggiorneremo il flusso di autenticazione per i nostri endpoint /derivatives/* (v3). (dettagli di seguito)

Modifiche alla generazione di PostData:


- Prima del rilascio: Gli utenti dovevano eseguire l'hashing dei parametri della stringa di query prima della codifica URL per la generazione di Authent, ad esempio, `greeting=hello world`.


- Dopo il rilascio: Il processo di autenticazione richiederà ora l'hashing del componente URI completo, codificato in URL, così come appare nella richiesta, ad esempio, `greeting=hello%20world`. Questo metodo migliora la sicurezza e si allinea alle migliori pratiche.
Questo aggiornamento è particolarmente rilevante per l'endpoint batchorder v3, che accetta un corpo JSON nei suoi parametri di query.


Compatibilità retroattiva e piani futuri:


Per il momento, questa modifica è retrocompatibile. La piattaforma accetterà entrambi i metodi di generazione di PostData descritti sopra. Tuttavia, in futuro intendiamo eliminare gradualmente il vecchio metodo (hashing dei parametri della stringa di query decodificati) per mantenere i più alti standard di sicurezza. Forniremo un ampio preavviso prima di questa modifica e incoraggiamo vivamente tutti gli utenti a passare al nuovo metodo il prima possibile per garantire una continuità del servizio senza interruzioni.

Nonce

nonce è un parametro intero in continuo incremento. Un buon nonce è l'ora del sistema in
millisecondi (in formato stringa). Il nostro sistema tollera nonce fuori sequenza per un breve periodo di tempo. Nonce non è richiesto.

Esempio 1415957147987

Molti problemi di autenticazione sono legati a un nonce errato. Una nuova coppia di chiavi API resetterà automaticamente il nonce e risolverà questi problemi.

Percorso dell'endpoint

endpointPath Questa è l'estensione URL dell'endpoint.

Esempio /api/v3/orderbook

Segreto API

L'api_secret si ottiene come descritto nella sezione precedente.

Esempio

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Sulla base di questi input, authent deve essere calcolato come segue:

  1. 1

    Concatenare

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Eseguire l'hashing del risultato del passaggio 1 con l'algoritmo SHA-256

  3. 3

    Decodificare Base64 la Sua api_secret

  4. 4

    Utilizzare il risultato del passaggio 3 per eseguire l'hashing del risultato del passaggio 2 con l'algoritmo HMAC-SHA-512

  5. 5

    Codificare Base64 il risultato del passaggio 4

Esempio

Di seguito viene mostrata un'implementazione di authent in Java. Per esempi completi e funzionanti in diversi linguaggi di programmazione, consultare la sezione Risorse aggiuntive. 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();
}

Hai ancora bisogno di aiuto?