本文へスキップ

認証

認証方法は2つあり、どちらもキーIDに紐付いています。署名付きリクエスト(推奨)と、OAuth 2 クライアントクレデンシャルによるBearerトークンです。

  1. 署名付きリクエスト(HMAC-SHA256)
  2. OAuth 2 クライアントクレデンシャル
  3. キーID、シークレット、ローテーション
  4. IP許可リスト

署名付きリクエスト(HMAC-SHA256)

すべての呼び出しで X-API-Key、X-Timestamp、X-Nonce、X-Signature を送信します。署名はメソッド、正確なリクエストターゲット(パスとクエリ)、タイムスタンプ、ノンス、ボディのハッシュを対象とするため、再送や改ざんされたリクエストは検証に失敗します。最大5分の時刻のずれは許容されます。10分以内にノンスを再利用すると 401 api_nonce_reused で拒否されます。

署名は、実際に送信する生のバイト列に対して計算してください。JSONは一度だけシリアライズし、そのバイト列をそのままハッシュ化して、同じバイト列をボディとして送信します。署名後に再シリアライズすることが api_signature_invalid の最も一般的な原因です。

Node.js
const payload = JSON.stringify(body);
const ts = Math.floor(Date.now() / 1000);
const nonce = randomBytes(16).toString("hex");
const bodyHash = createHash("sha256").update(payload).digest("hex");
const canonical = ["POST", "/v1/flights/search", ts, nonce, bodyHash].join("\n");
const signature = createHmac("sha256", SECRET).update(canonical).digest("hex");

OAuth 2 クライアントクレデンシャル

すべてのリクエストへの署名がお使いのスタックに合わない場合は、POST /v1/oauth/token(grant_type=client_credentials、フォームエンコード)でキーIDとシークレットを短期間有効なBearerトークンと交換できます。トークンの有効期間は30分で、付与されたスコープを持ちます。scope パラメーターでその一部を指定して取得することもできます。

すべての呼び出しで、トークンを Authorization: Bearer として X-API-Key とともに送信します。キーIDはリクエストごとに再確認されるため、キーを失効させるとそのトークンも直ちに無効になります。

cURL
curl -X POST "https://api.dubaitrip.com/v1/oauth/token" \
  -d grant_type=client_credentials -d client_id=$KEY_ID -d client_secret=$SECRET

キーID、シークレット、ローテーション

サンドボックスキーは dt_sbx_ で、本番キーは dt_live_ で始まります。キーは1つの環境と1つのパートナーに属します。シークレットは作成時、ローテーション時、表示リンク経由で一度だけ表示され、当社側ではハッシュ化して保存されます。

ローテーションは開発者ポータルから行います。新しいキーIDとシークレットが発行され、古いキーはお選びいただいた猶予期間(最長7日間)中は引き続き使用できるため、ダウンタイムなしで切り替えられます。失効は即時に反映されます。

IP許可リスト

任意で、開発者ポータルから各環境をIPv4/IPv6アドレスまたはCIDR範囲のセットに限定できます。それ以外のアドレスからのリクエストは、正しく署名されていても 403 api_ip_not_allowed で拒否されます。すべての送信元を受け付ける場合はリストを空欄にしてください。