Authenticatiereeksen genereren (REST API)

Laatst bijgewerkt: 31 mrt 2025

Sommige REST-eindpunten maken gevoelige bewerkingen mogelijk, zoals het plaatsen van orders of het aanvragen van een opname van digitale activa. Deze privé-eindpunten kunnen daarom alleen worden aangeroepen via versleutelde verzoeken en een authenticatiestring (authent) moet in elk dergelijk verzoek worden opgenomen. authent wordt berekend op basis van de volgende invoer:

PostData

postData is een "&" aaneenschakeling in de vorm <argument>=<value> en is specifiek voor elk REST-eindpunt.

Voorbeeld

Om het eindpunt orderbook te gebruiken, kiest u het argument symbool met waarde
fi_xbtusd_180615. postData wordt dan gegeven door symbol=fi_xbtusd_180615.

Update authenticatiestroom voor v3-eindpunten: Vanaf 20 februari 2024, om in lijn te zijn met best practices en een hogere beveiligingsstandaard te garanderen, zullen we de authenticatiestroom voor onze /derivatives/* (v3) eindpunten bijwerken. (details hieronder)

Wijzigingen in PostData-generatie:


- Vóór de release: Gebruikers moesten query string parameters hashen vóór url-codering voor Authent-generatie, bijv. `greeting=hello world`.


- Na de release: Het authenticatieproces vereist nu het hashen van het volledige, url-gecodeerde URI-component zoals het verschijnt in het verzoek, bijv. `greeting=hello%20world`. Deze methode verhoogt de beveiliging en sluit aan bij de best practices.
Deze update is met name relevant voor het v3 batchorder-eindpunt, dat een JSON-body accepteert in de queryparameters.


Achterwaartse compatibiliteit en toekomstplannen:


Voorlopig is deze wijziging achterwaarts compatibel. Het platform accepteert beide hierboven beschreven PostData-generatiemethoden. We streven er echter naar om de oude methode (het hashen van gedecodeerde query string parameters) in de toekomst uit te faseren om de hoogste beveiligingsstandaarden te handhaven. We zullen ruim van tevoren een kennisgeving doen van deze wijziging en moedigen alle gebruikers ten zeerste aan om zo snel mogelijk over te stappen op de nieuwe methode om een naadloze servicecontinuïteit te garanderen.

Nonce

nonce is een continu oplopende integer parameter. Een goede nonce is uw systeemtijd in
milliseconden (in stringformaat). Ons systeem tolereert nonces die gedurende een korte periode niet op volgorde zijn. Nonce is niet vereist.

Voorbeeld 1415957147987

Veel authenticatieproblemen houden verband met een onjuiste nonce. Een nieuw paar API-sleutels zal de nonce automatisch resetten en deze problemen oplossen.

Eindpuntpad

endpointPath Dit is de URL-extensie van het eindpunt.

Voorbeeld /api/v3/orderbook

API-geheim

De api_secret wordt verkregen zoals beschreven in de vorige sectie.

Voorbeeld

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Op basis van deze invoer moet authent als volgt worden berekend:

  1. 1

    Voeg samen

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Hash het resultaat van stap 1 met het SHA-256-algoritme

  3. 3

    Base64-decodeer uw api_secret

  4. 4

    Gebruik het resultaat van stap 3 om het resultaat van stap 2 te hashen met het HMAC-SHA-512-algoritme

  5. 5

    Base64-codeer het resultaat van stap 4

Voorbeeld

Het volgende toont een implementatie van authent in Java. Voor volledige werkende voorbeelden in verschillende programmeertalen, zie de sectie Aanvullende bronnen. 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();
}

Meer hulp nodig?