Authentifizierungs-Strings generieren (REST API)

Zuletzt aktualisiert: 31. März 2025

Einige REST-Endpunkte ermöglichen die Durchführung sensibler Vorgänge wie das Platzieren von Aufträgen oder das Anfordern einer Auszahlung digitaler Assets. Diese privaten Endpunkte können daher nur über verschlüsselte Anfragen aufgerufen werden, und jede solche Anfrage muss eine Authentifizierungszeichenfolge (authent) enthalten. authent wird aus den folgenden Eingaben berechnet:

PostData

postData ist eine "&"-Verkettung in der Form <argument>=<value> und ist spezifisch für jeden REST-Endpunkt.

Beispiel

Um den Endpunkt Orderbuch zu betreiben, wählen Sie das Argument Symbol mit dem Wert
fi_xbtusd_180615. postData wird dann durch symbol=fi_xbtusd_180615 angegeben.

Aktualisierung des Authentifizierungsflusses für v3-Endpunkte: Ab dem 20. Februar 2024 werden wir, um den Best Practices zu entsprechen und einen höheren Sicherheitsstandard zu gewährleisten, den Authentifizierungsfluss für unsere /derivatives/* (v3)-Endpunkte aktualisieren. (Details unten)

Änderungen bei der PostData-Generierung:


- Vor der Veröffentlichung: Benutzer mussten Abfrageparameter vor der URL-Kodierung für die Authent-Generierung hashen, z.B. `greeting=hello world`.


- Nach der Veröffentlichung: Der Authentifizierungsprozess erfordert nun das Hashen der vollständigen, URL-kodierten URI-Komponente, wie sie in der Anfrage erscheint, z.B. `greeting=hello%20world`. Diese Methode erhöht die Sicherheit und entspricht den Best Practices.
Dieses Update ist besonders relevant für den v3-Batchorder-Endpunkt, der einen JSON-Body in seinen Abfrageparametern akzeptiert.


Abwärtskompatibilität und Zukunftspläne:


Vorerst ist diese Änderung abwärtskompatibel. Die Plattform wird beide oben beschriebenen Methoden zur PostData-Generierung akzeptieren. Wir beabsichtigen jedoch, die alte Methode (Hashen dekodierter Abfrageparameter) in Zukunft auslaufen zu lassen, um die höchsten Sicherheitsstandards aufrechtzuerhalten. Wir werden diese Änderung rechtzeitig ankündigen und alle Benutzer dringend dazu ermutigen, so schnell wie möglich auf die neue Methode umzusteigen, um eine nahtlose Servicekontinuität zu gewährleisten.

Nonce

nonce ist ein kontinuierlich inkrementierender Integer-Parameter. Eine gute Nonce ist Ihre Systemzeit in
Millisekunden (im String-Format). Unser System toleriert Nonces, die für eine kurze Zeit außer der Reihe sind. Nonce ist nicht erforderlich.

Beispiel 1415957147987

Viele Authentifizierungsprobleme hängen mit einer falschen Nonce zusammen. Ein neues Paar API-Schlüssel setzt die Nonce automatisch zurück und löst diese Probleme.

Endpunktpfad

endpointPath Dies ist die URL-Erweiterung des Endpunkts.

Beispiel /api/v3/orderbook

API-Geheimnis

Der api_secret wird wie im vorherigen Abschnitt beschrieben bezogen.

Beispiel

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Basierend auf diesen Eingaben muss authent wie folgt berechnet werden:

  1. 1

    Verketten Sie

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Hashen Sie das Ergebnis von Schritt 1 mit dem SHA-256-Algorithmus

  3. 3

    Base64-dekodieren Sie Ihr api_secret

  4. 4

    Verwenden Sie das Ergebnis von Schritt 3, um das Ergebnis von Schritt 2 mit dem HMAC-SHA-512-Algorithmus zu hashen

  5. 5

    Base64-kodieren Sie das Ergebnis von Schritt 4

Beispiel

Das Folgende zeigt eine Implementierung von authent in Java. Vollständige Arbeitsbeispiele in verschiedenen Programmiersprachen finden Sie im Abschnitt Zusätzliche Ressourcen. 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();
}

Brauchst du weitere Hilfe?