All
Filtrera efter:
Hur gör jag en kontantinsättning till mitt konto?
Jag behöver hjälp med kontoverifiering
Varför kan jag inte komma åt mitt konto?
Finns det avgifter för kryptoutttag?
Jag behöver hjälp med att logga in på mitt konto
API-autentisering krävs när ett API-anrop får åtkomst till ett konto via en av de privata API-metoderna.
Till exempel är kontohanteringsmetoderna som Balance, TradeBalance och OpenOrders; handelsmetoderna AddOrder och CancelOrder; och finansieringsmetoderna som DepositAddresses och WithdrawInfo, alla privata API-metoder som skulle kräva API-autentisering.
API-autentisering baseras på ett offentligt/privat nyckelpar (gemensamt känt som en API-nyckel) och en kryptografisk signatur som använder hash-algoritmer som SHA256 och HMAC SHA512.
En exempel-API-nyckel skulle bestå av en offentlig och privat nyckel liknande följande:
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==Observera att dessa exempel inte kan användas eftersom de inte är associerade med något Kraken-konto.
Kryptografiska signaturer skapas i realtid av API-klientkoden. Data för API-anropet passerar genom en serie hash- och meddelandeautentiseringsalgoritmer som säkert signerar data med hjälp av API-hemligheten (den privata delen av API-nyckeln).
API-nyckeln och signaturen tillhandahålls API:et via de anpassade HTTP-huvudena API-Key och API-Sign.
API-nyckeln används för att identifiera vilket konto som nås, därför är nyckelvärdet identiskt för varje API-anrop. Den kryptografiska signaturen används för att autentisera API-anropet och beräknas med variabla värden (som nonce), därför är signaturvärdet annorlunda för varje API-anrop.
Exempel på HTTP-huvudena API-Key och API-Sign är följande:
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
Observera att API-Key-värdet är exakt detsamma som den offentliga nyckeln som visas ovan, men att API-Sign-värdet (signaturen) skiljer sig från den privata nyckeln som visas ovan och kommer att ändras till ett nytt värde för varje API-anrop.
Vår API-dokumentation anger att API-Sign-värdet är en "meddelandesignatur som använder HMAC-SHA512 av (URI-sökväg + SHA256(nonce + POST-data)) och base64-avkodad hemlig API-nyckel", vilket kan delas upp i flera distinkta delar enligt följande:
Variabler
URI-sökväg = URL för API-anrop utan 'https://api.kraken.com'.
nonce = En unik identifierare som måste öka i värde för varje API-anrop (ofta en UNIX-tidsstämpel, vilket är den aktuella tiden i sekunder (eller millisekunder för högre upplösning) sedan 1 januari 1970).
POST-data = Formulärkodade namn/värde-par för nonce och API-metodparametrarna.
Exempel på variablerna för ett anrop till metoden TradeBalance är följande (observera att alla värden är strängvärden oavsett vad värdena representerar):
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
Algoritm
Beräkna SHA256 av nonce och POST-data.
Avkoda API-hemligheten (den privata delen av API-nyckeln) från base64.
Beräkna HMAC av URI-sökvägen och SHA256, med SHA512 som HMAC-hash och den avkodade API-hemligheten som HMAC-nyckel.
Koda HMAC till base64.
Ett exempel på algoritmen med variablerna som visas ovan är följande:
Base64Encode(HMAC-SHA512 of ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) using Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") as the HMAC key
Resultatet är API-Sign-värdet.
Minimala (ingen felkontroll) men fullt funktionella exempel på hur man genererar en API-autentiseringssignatur för TradeBalance API-slutpunkten är följande:
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;