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:
- 01HTTP metodu, büyük harf
- 02İstek yolu
- 03Sıralanmış sorgu dizesi, yoksa boş
- 04Saniye cinsinden Unix zaman damgası
- 05İstek başına benzersiz nonce
- 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