İçeriğe geç
Rate Extra

HMAC-SHA256 ile API kimlik doğrulama

TravelDistro istekleri token'la değil imzayla doğrulanır. Authorization başlığı anahtar kimliğinizi ve istek üzerindeki imzayı taşır; iki başlık zaman damgası ve nonce taşır. Bearer token desteklenmez.

Ne imzalanır

İmza, API gizli anahtarınızla anahtarlanmış, yeni satırla birleştirilmiş altı satır üzerinde bir HMAC-SHA256'dır:

  1. 01HTTP metodu, büyük harf
  2. 02İstek yolu
  3. 03Sıralanmış sorgu dizesi, yoksa boş
  4. 04Saniye cinsinden Unix zaman damgası
  5. 05İstek başına benzersiz nonce
  6. 06İstek gövdesinin SHA-256 hex'i; GET için boş dizenin hash'i

Başlıklar

Authorization
TD-HMAC-SHA256 KeyId=<key_id>, Signature=<hex>
X-TD-Timestamp
Unix saniye; sunucu saatinin 300 s içinde olmalı
X-TD-Nonce
İstek başına benzersiz; tekrar eden nonce reddedilir

Node.js örneği

import crypto from "node:crypto";

const keyId = process.env.TD_KEY_ID!;
const secret = process.env.TD_SECRET!;

const method = "GET";
const path = "/v1/account";        // request path as sent to the server
const query = "";                  // sorted query string, empty if none
const timestamp = Math.floor(Date.now() / 1000).toString();
const nonce = crypto.randomUUID();
const body = "";
const bodyHash = crypto.createHash("sha256").update(body).digest("hex");

const stringToSign = [method, path, query, timestamp, nonce, bodyHash].join("\n");
const signature = crypto.createHmac("sha256", secret).update(stringToSign).digest("hex");

const res = await fetch("https://api.traveldistro.com" + path, {
  headers: {
    Authorization: `TD-HMAC-SHA256 KeyId=${keyId}, Signature=${signature}`,
    "X-TD-Timestamp": timestamp,
    "X-TD-Nonce": nonce,
  },
});

Yayına almadan önce tam yol formatını (/v1 öneki dahil mi) referans ve bir test anahtarıyla doğrulayın; referans belirleyicidir.

Kurallar

  • Zaman damgası sunucu saatinin ±300 saniyesi içinde olmalıdır.
  • Bir nonce yalnızca bir kez kullanılabilir; tekrarlar reddedilir.
  • Acente API'sinde hiçbir yerde Bearer token kabul edilmez.
  • Gizli anahtarı sunucunuzda tutun; tarayıcıya veya mobil uygulamaya asla göndermeyin.

Kimlik doğrulama hataları

401
Eksik, geçersiz veya iptal edilmiş anahtar
403
IP anahtarın izin listesinde değil, acente askıda veya MODULE_NOT_ENABLED
429
RATE_LIMITED; Retry-After saniye bekleyip aynı isteği yeniden gönderin

Lisanslı seyahat acentesi misiniz? API erişimi için başvurun.

API erişimi al