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

Τελευταία ενημέρωση: 7 Οκτωβρίου 2026

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

PostData

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

Παράδειγμα

Για να χρησιμοποιήσετε το endpoint orderbook, επιλέγετε το όρισμα symbol με τιμή
fi_xbtusd_180615. Τότε το postData προκύπτει ως symbol=fi_xbtusd_180615.

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

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


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


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


Συμβατότητα με προηγούμενες εκδόσεις και μελλοντικά σχέδια:


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

Nonce

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

Παράδειγμα 1415957147987

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

Διαδρομή Endpoint

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();
}