All
Filtern nach:
Wie zahle ich Cash auf mein Konto ein?
Ich brauche Hilfe bei der Kontoverifizierung
Warum kann ich nicht auf mein Konto zugreifen?
Gibt es Gebühren für das Auszahlen von Krypto?
Ich brauche Hilfe bei der Anmeldung bei meinem Konto
Die API-Authentifizierung ist immer dann erforderlich, wenn ein API-Aufruf über eine der privaten API-Methoden auf ein Konto zugreift.
Zum Beispiel sind die Kontoverwaltungsmethoden wie Balance, TradeBalance und OpenOrders; die Handelsmethoden AddOrder und CancelOrder; und die Finanzierungsmethoden wie DepositAddresses und WithdrawInfo allesamt private API-Methoden, die eine API-Authentifizierung erfordern würden.
Die API-Authentifizierung basiert auf einem öffentlichen/privaten Schlüsselpaar (zusammenfassend als API-Schlüssel) und einer kryptografischen Signatur unter Verwendung von Hash-Algorithmen wie SHA256 und HMAC SHA512.
Ein Beispiel für einen API-Schlüssel würde aus einem öffentlichen und einem privaten Schlüssel bestehen, ähnlich den folgenden:
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==Beachten Sie, dass diese Beispiele nicht verwendet werden können, da sie keinem Kraken-Konto zugeordnet sind.
Kryptografische Signaturen werden in Echtzeit vom API-Client-Code erstellt. Die Daten für den API-Aufruf werden durch eine Reihe von Hash- und Nachrichtenauthentifizierungsalgorithmen geleitet, die die Daten mithilfe des API-Geheimnisses (des privaten Teils des API-Schlüssels) sicher signieren.
Der API-Schlüssel und die Signatur werden der API über die benutzerdefinierten HTTP-Header API-Key und API-Sign bereitgestellt.
Der API-Schlüssel wird verwendet, um zu identifizieren, auf welches Konto zugegriffen wird, daher ist der Schlüsselwert für jeden API-Aufruf identisch. Die kryptografische Signatur wird zur Authentifizierung des API-Aufrufs verwendet und wird unter Verwendung variabler Werte (wie der Nonce) berechnet, daher ist der Signaturwert für jeden API-Aufruf unterschiedlich.
Beispiele für die HTTP-Header API-Key und API-Sign sind wie folgt:
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
Beachten Sie, dass der API-Key-Wert genau derselbe ist wie der oben gezeigte öffentliche Schlüssel, aber der API-Sign-Wert (die Signatur) sich vom oben gezeigten privaten Schlüssel unterscheidet und sich für jeden API-Aufruf in einen neuen Wert ändert.
Unsere API-Dokumentation besagt, dass der API-Sign-Wert eine „Nachrichtensignatur unter Verwendung von HMAC-SHA512 von (URI-Pfad + SHA256(Nonce + POST-Daten)) und einem base64-dekodierten geheimen API-Schlüssel“ ist, die wie folgt in mehrere verschiedene Teile unterteilt werden kann:
Variablen
URI-Pfad = URL des API-Aufrufs ohne 'https://api.kraken.com'.
Nonce = Ein eindeutiger Bezeichner, dessen Wert mit jedem API-Aufruf steigen muss (oft ein UNIX-Zeitstempel, der die aktuelle Zeit in Sekunden (oder Millisekunden für höhere Auflösung) seit dem 1. Januar 1970 ist).
POST-Daten = Formular-kodierte Name/Wert-Paare der Nonce und der API-Methodenparameter.
Beispiele für die Variablen für einen Aufruf der TradeBalance-Methode sind wie folgt (beachten Sie, dass alle Werte Zeichenkettenwerte sind, unabhängig davon, was die Werte darstellen):
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
Algorithmus
Berechnen Sie den SHA256 des Nonce und der POST-Daten.
Dekodieren Sie das API-Geheimnis (den privaten Teil des API-Schlüssels) aus Base64.
Berechnen Sie den HMAC des URI-Pfads und des SHA256, wobei SHA512 als HMAC-Hash und das dekodierte API-Geheimnis als HMAC-Schlüssel verwendet wird.
Kodieren Sie den HMAC in Base64.
Ein Beispiel des Algorithmus unter Verwendung der oben gezeigten Variablen ist wie folgt:
Base64Encode(HMAC-SHA512 von ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) unter Verwendung von Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") als HMAC-Schlüssel
Das Ergebnis ist der API-Sign-Wert.
Minimale (ohne Fehlerprüfung), aber voll funktionsfähige Beispiele zur Generierung einer API-Authentifizierungssignatur für den TradeBalance API-Endpunkt sind wie folgt:
Python
# Import required Python libraries
import time
import base64
import hashlib
import hmac
# Decode API private key from base64 format displayed in account management
api_secret = base64.b64decode(
"FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ=="
)
# Variables (API endpoint, nonce and HTTP POST data)
api_path = "/0/private/TradeBalance"
api_nonce = str(int(time.time() * 1000))
api_post = "nonce=" + api_nonce + "&asset=xbt"
# Cryptographic hash algorithms
api_sha256 = hashlib.sha256(api_nonce.encode('utf-8') + api_post.encode('utf-8'))
api_hmac = hmac.new(
api_secret,
api_path.encode('utf-8') + api_sha256.digest(),
hashlib.sha512
)
# Encode signature into base64 format used in API-Sign value
api_signature = base64.b64encode(api_hmac.digest())
# API authentication signature for use in API-Sign HTTP header
print(api_signature.decode())NodeJS
Bash
// Import required NodeJS libraries
const crypto = require('crypto');
// Decode API private key from base64 format displayed in account management
const apiSecret = Buffer.from(
'FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==',
'base64'
);
// Variables (API endpoint, nonce and HTTP POST data)
const apiPath = '/0/private/TradeBalance';
const apiNonce = Date.now().toString();
const apiPost = `nonce=${apiNonce}&asset=xbt`;
// Cryptographic hash algorithms
const apiSha256 = crypto.createHash('sha256').update(`${apiNonce}${apiPost}`).digest();
const apiSha512 = crypto.createHmac('sha512', apiSecret).update(apiPath).update(apiSha256).digest();
// Encode signature into base64 format used in API-Sign value
const apiSignature = apiSha512.toString('base64');
// API authentication signature for use in API-Sign HTTP header
console.log(apiSignature);PHP
Bash
// Decode API private key from base64 format displayed in account management
$apiSecret = base64_decode('FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==');
// Variables (API endpoint, nonce and HTTP POST data)
$apiPath = '/0/private/TradeBalance';
$apiNonce = explode(' ', microtime());
$apiNonce = $apiNonce[1] . substr($apiNonce[0], 2, 3);
$apiPost = "nonce={$apiNonce}&asset=xbt";
// Cryptographic hash algorithms
$apiSha256 = hash('sha256', $apiNonce . $apiPost, true);
$apiSha512 = hash_hmac('sha512', $apiPath . $apiSha256, $apiSecret, true);
// Encode signature into base64 format used in API-Sign value
$apiSignature = base64_encode($apiSha512);
// API authentication signature for use in API-Sign HTTP header
print $apiSignature;