All
Filtrer etter:
Hvordan setter jeg inn penger på kontoen min?
Jeg trenger hjelp med kontobekreftelse
Hvorfor kan jeg ikke få tilgang til kontoen min?
Finnes det noen gebyrer for uttak av krypto?
Jeg trenger hjelp med å logge på kontoen min
API-autentisering kreves når et API-kall får tilgang til en konto via en av de private API-metodene.
For eksempel er kontoadministrasjonsmetodene som Balance, TradeBalance og OpenOrders; handelsmetodene AddOrder og CancelOrder; og finansieringsmetodene som DepositAddresses og WithdrawInfo, alle private API-metoder som krever API-autentisering.
API-autentisering er basert på et offentlig/privat nøkkelpar (samlet kjent som en API-nøkkel) og en kryptografisk signatur som bruker hash-algoritmer som SHA256 og HMAC SHA512.
Et eksempel på en API-nøkkel vil bestå av en offentlig og privat nøkkel som ligner på følgende:
Bash
Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==Merk at disse eksemplene ikke kan brukes da de ikke er knyttet til noen Kraken-konto.
Kryptografiske signaturer opprettes i sanntid av API-klientkoden. Dataene for API-kallet sendes gjennom en serie hash- og meldingsautentiseringsalgoritmer som sikkert signerer dataene ved hjelp av API-hemmeligheten (den private delen av API-nøkkelen).
API-nøkkelen og signaturen leveres til API-et via de tilpassede HTTP-hodene API-Key og API-Sign.
API-nøkkelen brukes til å identifisere hvilken konto som blir tilgang til, derfor er nøkkelverdien identisk for hvert API-kall. Den kryptografiske signaturen brukes til å autentisere API-kallet og beregnes ved hjelp av variable verdier (som nonce), derfor er signaturverdien forskjellig for hvert API-kall.
Eksempler på API-Key og API-Sign HTTP-hoder er som følger:
API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==
Merk at API-Key-verdien er nøyaktig den samme som den offentlige nøkkelen vist ovenfor, men at API-Sign-verdien (signaturen) er forskjellig fra den private nøkkelen vist ovenfor og vil endres til en ny verdi for hvert API-kall.
Vår API-dokumentasjon angir at API-Sign-verdien er en "meldingssignatur som bruker HMAC-SHA512 av (URI-sti + SHA256(nonce + POST-data)) og base64-dekodet hemmelig API-nøkkel", som kan deles inn i flere distinkte deler som følger:
Variabler
URI-sti = URL for API-kall uten 'https://api.kraken.com'.
nonce = En unik identifikator som må øke i verdi for hvert API-kall (ofte et UNIX-tidsstempel, som er gjeldende tid i sekunder (eller millisekunder for høyere oppløsning) siden 1. januar 1970).
POST-data = Skjema-kodede navn/verdi-par av nonce og API-metodeparametrene.
Eksempler på variablene for et kall til TradeBalance-metoden er som følger (merk at alle verdiene er strengverdier uavhengig av hva verdiene representerer):
URI path = "/0/private/TradeBalance"
nonce = "1540973848000"
POST data = "nonce=1540973848000&asset=xbt"
Algoritme
Beregn SHA256 av nonce og POST-dataene.
Dekod API-hemmeligheten (den private delen av API-nøkkelen) fra base64.
Beregn HMAC av URI-stien og SHA256, ved å bruke SHA512 som HMAC-hash og den dekodede API-hemmeligheten som HMAC-nøkkel.
Kod HMAC til base64.
Et eksempel på algoritmen som bruker variablene 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-verdien.
Minimale (ingen feilkontroll) men fullt funksjonelle eksempler på generering av en API-autentiseringssignatur for TradeBalance API-endepunktet 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;