All
Filtrer efter:
Hvordan indbetaler jeg kontanter på min konto?
Jeg har brug for hjælp til kontoverificering
Hvorfor kan jeg ikke få adgang til min konto?
Er der gebyrer for kryptoudbetaling?
Jeg har brug for hjælp til at logge ind på min konto
API-autentificering er påkrævet, når et API-kald tilgår en konto via en af de private API-metoder.
For eksempel er kontostyringsmetoder som Balance, TradeBalance og OpenOrders; handelsmetoderne AddOrder og CancelOrder; og finansieringsmetoderne som DepositAddresses og WithdrawInfo alle private API-metoder, der kræver API-autentificering.
API-autentificering er baseret på et offentligt/privat nøglepar (samlet kendt som en API-nøgle) og en kryptografisk signatur, der bruger hash-algoritmer som SHA256 og HMAC SHA512.
Et eksempel på en API-nøgle ville bestå af en offentlig og privat nøgle, der ligner følgende:
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==Bemærk, at disse eksempler ikke kan bruges, da de ikke er tilknyttet nogen Kraken-konto.
Kryptografiske signaturer oprettes i realtid af API-klientkoden. Dataene for API-kaldet sendes gennem en række hash- og meddelelsesautentificeringsalgoritmer, som sikkert signerer dataene ved hjælp af API-hemmeligheden (den private del af API-nøglen).
API-nøglen og signaturen leveres til API'en via de brugerdefinerede HTTP-headere API-Key og API-Sign.
API-nøglen bruges til at identificere, hvilken konto der tilgås, og derfor er nøgleværdien identisk for hvert API-kald. Den kryptografiske signatur bruges til at autentificere API-kaldet og beregnes ved hjælp af variable værdier (såsom nonce), og derfor er signaturværdien forskellig for hvert API-kald.
Eksempler på API-Key og API-Sign HTTP-headere er som følger:
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
Bemærk, at API-Key-værdien er nøjagtig den samme som den offentlige nøgle vist ovenfor, men at API-Sign-værdien (signaturen) er forskellig fra den private nøgle vist ovenfor og vil ændre sig til en ny værdi for hvert API-kald.
Vores API-dokumentation angiver, at API-Sign-værdien er en "meddelelsessignatur, der bruger HMAC-SHA512 af (URI-sti + SHA256(nonce + POST-data)) og base64-dekodet hemmelig API-nøgle", som kan opdeles i flere forskellige dele som følger:
Variabler
URI path = URL for API-kald uden 'https://api.kraken.com'.
nonce = En unik identifikator, hvis værdi skal stige med hvert API-kald (ofte et UNIX-tidsstempel, som er den aktuelle tid i sekunder (eller millisekunder for højere opløsning) siden 1. januar 1970).
POST data = Form-kodede navn/værdi-par af nonce og API-metodeparametrene.
Eksempler på variablerne for et kald til TradeBalance-metoden er som følger (bemærk, at alle værdierne er strengværdier, uanset hvad værdierne repræsenterer):
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
Algoritme
Beregn SHA256 af nonce og POST-dataene.
Dekod API-hemmeligheden (den private del af API-nøglen) fra base64.
Beregn HMAC af URI-stien og SHA256, ved at bruge SHA512 som HMAC-hash og den dekodede API-hemmelighed som HMAC-nøgle.
Kod HMAC til base64.
Et eksempel på algoritmen, der bruger variablerne vist ovenfor, er som følger:
Base64Encode(HMAC-SHA512 of ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) using Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") as the HMAC key
Resultatet er API-Sign-værdien.
Minimale (ingen fejlkontrol), men fuldt funktionelle eksempler på generering af en API-autentificeringssignatur for TradeBalance API-slutpunktet er som følger:
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;