Générer des chaînes d'authentification (API REST)

Dernière mise à jour : 31 mars 2025

Certains points de terminaison REST permettent d'effectuer des opérations sensibles telles que le placement d'ordres ou la demande de retrait d'actifs numériques. Ces points de terminaison privés ne peuvent donc être appelés que via des requêtes chiffrées et une chaîne d'authentification (authent) doit être incluse dans chaque requête de ce type. L'authentification est calculée à partir des entrées suivantes :

PostData

postData est une concaténation "&" sous la forme <argument>=<value> et est spécifique à chaque point de terminaison REST.

Exemple

Pour utiliser le carnet d'ordres du point de terminaison, vous choisissez l'argument symbole avec la valeur
fi_xbtusd_180615. postData est alors donné par symbol=fi_xbtusd_180615.

Mise à jour du flux d'authentification pour les points de terminaison v3 : À compter du 20 février 2024, afin de s'aligner sur les meilleures pratiques et d'assurer un niveau de sécurité plus élevé, nous allons mettre à jour le flux d'authentification pour nos points de terminaison /derivatives/* (v3). (détails ci-dessous)

Modifications de la génération de PostData :


- Avant la publication : Les utilisateurs devaient hacher les paramètres de la chaîne de requête avant l'encodage URL pour la génération d'Authent, par exemple, `greeting=hello world`.


- Après la publication : Le processus d'authentification exigera désormais le hachage du composant URI complet, encodé en URL, tel qu'il apparaît dans la requête, par exemple, `greeting=hello%20world`. Cette méthode renforce la sécurité et s'aligne sur les meilleures pratiques.
Cette mise à jour est particulièrement pertinente pour le point de terminaison v3 batchorder, qui accepte un corps JSON dans ses paramètres de requête.


Rétrocompatibilité et plans futurs :


Pour l'instant, ce changement est rétrocompatible. La plateforme acceptera les deux méthodes de génération de PostData décrites ci-dessus. Cependant, nous visons à supprimer progressivement l'ancienne méthode (hachage des paramètres de chaîne de requête décodés) à l'avenir afin de maintenir les normes de sécurité les plus élevées. Nous fournirons un préavis suffisant avant ce changement et encourageons fortement tous les utilisateurs à passer à la nouvelle méthode dès que possible pour assurer une continuité de service sans faille.

Nonce

nonce est un paramètre entier à incrémentation continue. Un bon nonce est l'heure de votre système en
millisecondes (au format chaîne). Notre système tolère les nonces qui sont désordonnés pendant une courte période. Le nonce n'est pas obligatoire.

Exemple 1415957147987

De nombreux problèmes d'authentification sont liés à un nonce incorrect. Une nouvelle paire de clés API réinitialisera automatiquement le nonce et résoudra ces problèmes.

Chemin du point de terminaison

endpointPath Il s'agit de l'extension d'URL du point de terminaison.

Exemple /api/v3/orderbook

Secret API

L'api_secret est obtenu comme décrit dans la section précédente.

Exemple

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Sur la base de ces entrées, l'authentification doit être calculée comme suit :

  1. 1

    Concaténer

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Hacher le résultat de l'étape 1 avec l'algorithme SHA-256

  3. 3

    Décoder en Base64 votre api_secret

  4. 4

    Utiliser le résultat de l'étape 3 pour hacher le résultat de l'étape 2 avec l'algorithme HMAC-SHA-512

  5. 5

    Encoder en Base64 le résultat de l'étape 4

Exemple

Ce qui suit montre une implémentation de l'authentification en Java. Pour des exemples complets et fonctionnels dans différents langages de programmation, consultez la section Ressources supplémentaires. 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();
}

Besoin d’aide supplémentaire ?