Özel uç noktalar için kimlik doğrulama algoritması nedir?

Son güncelleme: 1 Nis 2025

Bir API çağrısı, özel API yöntemlerinden biri aracılığıyla bir hesaba eriştiğinde API kimlik doğrulaması gereklidir.

Örneğin, Bakiye, Ticaret Bakiyesi ve Açık Emirler gibi hesap yönetimi yöntemleri; Emir Ekle ve Emir İptal Et gibi alım satım yöntemleri; ve Para Yatırma Adresleri ve Para Çekme Bilgileri gibi fonlama yöntemlerinin tümü, API kimlik doğrulaması gerektiren özel API yöntemleridir.

API Anahtarları ve Kriptografik İmzalar

API kimlik doğrulaması, bir genel/özel anahtar çiftine (topluca API anahtarı olarak bilinir) ve SHA256 ve HMAC SHA512 gibi karma algoritmaları kullanan bir kriptografik imzaya dayanır.

Örnek bir API anahtarı, aşağıdakine benzer bir genel ve özel anahtardan oluşur:

bash

Bash

Public Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y
 
 Private Key: FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==

Bu örneklerin herhangi bir Kraken hesabıyla ilişkili olmadığından kullanılamayacağını unutmayın.

Kriptografik imzalar, API istemci kodu tarafından gerçek zamanlı olarak oluşturulur. API çağrısı için veriler, API sırrı (API anahtarının özel kısmı) kullanılarak verileri güvenli bir şekilde imzalayan bir dizi karma ve mesaj kimlik doğrulama algoritmasından geçirilir.

HTTP Başlıkları

API anahtarı ve imzası, özel HTTP başlıkları API-Key ve API-Sign aracılığıyla API'ye sağlanır.

API anahtarı, hangi hesaba erişildiğini belirlemek için kullanılır, bu nedenle anahtar değeri her API çağrısı için aynıdır. Kriptografik imza, API çağrısını doğrulamak için kullanılır ve değişken değerler (nonce gibi) kullanılarak hesaplanır, bu nedenle imza değeri her API çağrısı için farklıdır.

API-Key ve API-Sign HTTP başlıklarının örnekleri şunlardır:

  • API-Key: CJbfPw4tnbf/9en/ZmpewCTKEwmmzO18LXZcHQcu7HPLWre4l8+V9I3y

  • API-Sign: RdQzoXRC83TPmbERpFj0XFVArq0Hfadm0eLolmXTuN2R24hzIqtAnF/f7vSfW1tGt7xQOn8bjm+Ht+X0KrMwlA==

API-Key değerinin yukarıda gösterilen genel anahtarla tamamen aynı olduğunu, ancak API-Sign değerinin (imza) yukarıda gösterilen özel anahtardan farklı olduğunu ve her API çağrısı için yeni bir değere dönüşeceğini unutmayın.

İmza Sözde Kodu

API belgelerimiz, API-Sign değerinin "(URI yolu + SHA256(nonce + POST verisi)) HMAC-SHA512 kullanılarak oluşturulan bir mesaj imzası ve base64 ile çözülmüş gizli API anahtarı" olduğunu belirtir ve bu, aşağıdaki gibi birkaç farklı bölüme ayrılabilir:

Değişkenler

  • URI yolu = API çağrısının URL'si, 'https://api.kraken.com' olmadan.

  • nonce = Her API çağrısında değeri artması gereken benzersiz bir tanımlayıcı (genellikle 1 Ocak 1970'ten bu yana saniye cinsinden (veya daha yüksek çözünürlük için milisaniye cinsinden) geçerli zaman olan bir UNIX zaman damgası).

  • POST verisi = nonce ve API yöntemi parametrelerinin form kodlu ad/değer çiftleri.

TradeBalance yöntemine yapılan bir çağrı için değişken örnekleri şunlardır (tüm değerlerin neyi temsil ettiğine bakılmaksızın dize değerleri olduğunu unutmayın):

  • URI yolu = "/0/private/TradeBalance"

  • nonce = "1540973848000"

  • POST verisi = "nonce=1540973848000&asset=xbt"

Algoritma

  • Nonce ve POST verilerinin SHA256'sını hesaplayın.

  • API sırrını (API anahtarının özel kısmı) base64'ten çözün.

  • URI yolunun ve SHA256'nın HMAC'ını, HMAC karması olarak SHA512'yi ve HMAC anahtarı olarak çözülmüş API sırrını kullanarak hesaplayın.

  • HMAC'ı base64'e kodlayın.

Yukarıda gösterilen değişkenleri kullanan algoritmanın bir örneği aşağıdaki gibidir:

  • Base64Encode(HMAC-SHA512 of ("/0/private/TradeBalance" + SHA256("1540973848000nonce=1540973848000&asset=xbt")) using Base64Decode("FRs+gtq09rR7OFtKj9BGhyOGS3u5vtY/EdiIBO9kD8NFtRX7w7LeJDSrX6cq1D8zmQmGkWFjksuhBvKOAWJohQ==") as the HMAC key

Sonuç, API-Sign değeridir.

Örnek Kod

TradeBalance API uç noktası için bir API kimlik doğrulama imzası oluşturmaya yönelik minimal (hata kontrolü olmayan) ancak tamamen işlevsel örnekler aşağıdaki gibidir:

python

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

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

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;

Daha fazla yardıma mı ihtiyacınız var?