Δημιουργία συμβολοσειρών ελέγχου ταυτότητας (REST API)

Τελευταία ενημέρωση: 31 Μαρτίου 2025

Ορισμένα REST endpoints επιτρέπουν την εκτέλεση ευαίσθητων λειτουργιών, όπως η τοποθέτηση εντολών ή η αίτηση ανάληψης ψηφιακού περιουσιακού στοιχείου. Αυτά τα ιδιωτικά endpoints μπορούν επομένως να καλούνται μόνο μέσω κρυπτογραφημένων αιτημάτων και μια συμβολοσειρά ελέγχου ταυτότητας (authent) πρέπει να περιλαμβάνεται σε κάθε τέτοιο αίτημα. Το authent υπολογίζεται από τις ακόλουθες εισόδους:

PostData

Το postData είναι μια συνένωση "&" με τη μορφή <argument>=<value> και είναι ειδικό για κάθε REST endpoint.

Παράδειγμα

Για να λειτουργήσετε το endpoint orderbook, επιλέγετε το όρισμα symbol με τιμή
fi_xbtusd_180615. Το postData δίνεται τότε από symbol=fi_xbtusd_180615.

Ενημέρωση Ροής Ελέγχου Ταυτότητας για v3 endpoints: Από τις 20 Φεβρουαρίου 2024, για να ευθυγραμμιστούμε με τις βέλτιστες πρακτικές και να διασφαλίσουμε ένα υψηλότερο πρότυπο ασφαλείας, θα ενημερώσουμε τη ροή ελέγχου ταυτότητας για τα /derivatives/* (v3) endpoints μας. (λεπτομέρειες παρακάτω)

Αλλαγές στη Δημιουργία PostData:


- Πριν την κυκλοφορία: Οι χρήστες έπρεπε να κάνουν hash τις παραμέτρους της συμβολοσειράς ερωτήματος πριν από την κωδικοποίηση URL για τη δημιουργία Authent, π.χ., `greeting=hello world`.


- Μετά την κυκλοφορία: Η διαδικασία ελέγχου ταυτότητας θα απαιτεί πλέον το hashing του πλήρους, κωδικοποιημένου URL URI component όπως εμφανίζεται στο αίτημα, π.χ., `greeting=hello%20world`. Αυτή η μέθοδος ενισχύει την ασφάλεια και ευθυγραμμίζεται με τις βέλτιστες πρακτικές.
Αυτή η ενημέρωση είναι ιδιαίτερα σημαντική για το v3 batchorder endpoint, το οποίο δέχεται ένα JSON body στις παραμέτρους ερωτήματός του.


Συμβατότητα προς τα Πίσω και Μελλοντικά Σχέδια:


Προς το παρόν, αυτή η αλλαγή είναι συμβατή προς τα πίσω. Η πλατφόρμα θα δέχεται και τις δύο μεθόδους δημιουργίας PostData που περιγράφονται παραπάνω. Ωστόσο, στοχεύουμε να καταργήσουμε σταδιακά την παλιά μέθοδο (hashing αποκωδικοποιημένων παραμέτρων συμβολοσειράς ερωτήματος) στο μέλλον για να διατηρήσουμε τα υψηλότερα πρότυπα ασφαλείας. Θα παρέχουμε επαρκή προειδοποίηση πριν από αυτή την αλλαγή και ενθαρρύνουμε έντονα όλους τους χρήστες να μεταβούν στη νέα μέθοδο το συντομότερο δυνατό για να διασφαλίσουν την απρόσκοπτη συνέχεια των υπηρεσιών.

Nonce

Το nonce είναι μια συνεχώς αυξανόμενη ακέραια παράμετρος. Ένα καλό nonce είναι η ώρα του συστήματός σας σε
χιλιοστά του δευτερολέπτου (σε μορφή συμβολοσειράς). Το σύστημά μας ανέχεται nonces που είναι εκτός σειράς για ένα σύντομο χρονικό διάστημα. Το Nonce δεν απαιτείται.

Παράδειγμα 1415957147987

Πολλά ζητήματα ελέγχου ταυτότητας σχετίζονται με λανθασμένο nonce. Ένα νέο ζεύγος κλειδιών API θα επαναφέρει αυτόματα το nonce και θα επιλύσει αυτά τα ζητήματα.

Endpoint Path

Το endpointPath είναι η επέκταση URL του endpoint.

Παράδειγμα /api/v3/orderbook

API Secret

Το api_secret λαμβάνεται όπως περιγράφεται στην προηγούμενη ενότητα.

Παράδειγμα

rttp4AzwRfYEdQ7R7X8Z/04Y4TZPa97pqCypi3xXxAqftygftnI6H9yGV+O
cUOOJeFtZkr8mVwbAndU3Kz4Q+eG

Με βάση αυτές τις εισόδους, το authent πρέπει να υπολογιστεί ως εξής:

  1. 1

    Συνενώστε

    postData

    +

    nonce

    +

    endpointPath

  2. 2

    Κάντε hash το αποτέλεσμα του βήματος 1 με τον αλγόριθμο SHA-256

  3. 4

    Χρησιμοποιήστε το αποτέλεσμα του βήματος 3 για να κάνετε hash το αποτέλεσμα του βήματος 2 με τον αλγόριθμο HMAC-SHA-512

  4. 5

    Κωδικοποιήστε Base64 το αποτέλεσμα του βήματος 4

Παράδειγμα

Το παρακάτω δείχνει μια υλοποίηση του authent σε Java. Για πλήρη λειτουργικά παραδείγματα σε διαφορετικές γλώσσες προγραμματισμού, ανατρέξτε στην ενότητα Πρόσθετοι Πόροι. 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();
}

Χρειάζεστε περισσότερη βοήθεια;