Authentifizierungsstrings generieren (REST API)

Zuletzt aktualisiert: 7. Oktober 2026

Einige REST-Endpunkte ermöglichen sensible Operationen wie das Aufgeben von Orders oder das Anfordern einer Auszahlung von digitalen Assets. Diese privaten Endpunkte können daher nur über verschlüsselte Anfragen aufgerufen werden, und jede solche Anfrage muss einen Authentifizierungs-String (authent) enthalten. authent wird aus folgenden Eingaben berechnet:

PostData

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

Beispiel

Um den Endpunkt orderbook zu verwenden, wählst du das Argument symbol mit dem Wert
fi_xbtusd_180615. postData lautet dann symbol=fi_xbtusd_180615.

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

Änderungen bei der PostData-Generierung:


- Vor dem Release: Kunden mussten Query-String-Parameter vor der URL-Kodierung hashen, um Authent zu generieren, z. B. `greeting=hello world`.


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


Rückwärtskompatibilität und weitere Pläne:


Diese Änderung ist vorerst rückwärtskompatibel. Die Plattform akzeptiert beide oben beschriebenen PostData-Generierungsmethoden. Wir beabsichtigen jedoch, die alte Methode (Hashen dekodierter Query-String-Parameter) künftig abzukündigen, um höchste Sicherheitsstandards zu wahren. Wir werden rechtzeitig darüber informieren und empfehlen allen Kunden dringend, so bald wie möglich auf die neue Methode umzustellen, um einen reibungslosen Betrieb sicherzustellen.

Nonce

nonce ist ein fortlaufend hochzählender Ganzzahl-Parameter. Eine geeignete Nonce ist die Systemzeit in
Millisekunden (im String-Format). Unser System toleriert Nonces, die kurzzeitig nicht in der richtigen Reihenfolge vorliegen. Nonce ist nicht erforderlich.

Beispiel 1415957147987

Viele Authentifizierungsprobleme sind auf eine falsche Nonce zurückzuführen. Ein neues API-Schlüsselpaar setzt die Nonce automatisch zurück und behebt diese Probleme.

Endpunktpfad

endpointPath – die URL-Erweiterung des Endpunkts.

Beispiel /api/v3/orderbook

API-Geheimnis

Der api_secret wird wie im vorherigen Abschnitt beschrieben abgerufen.

Beispiel

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Auf Grundlage dieser Eingaben muss authent wie folgt berechnet werden:

  1. 1

    Verkettung

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Hashe das Ergebnis aus Schritt 1 mit dem SHA-256-Algorithmus

  3. 3

    Base64-dekodiere dein api_secret

  4. 4

    Nutze das Ergebnis aus Schritt 3, um das Ergebnis aus Schritt 2 mit dem HMAC-SHA-512-Algorithmus zu hashen

  5. 5

    Base64-dekodiere das Ergebnis aus Schritt 4

Beispiel

Im Folgenden wird eine Implementierung von authent in Java gezeigt. Vollständige Beispiele in verschiedenen Programmiersprachen findest du 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();
}