メインコンテンツへスキップ
プラットフォームレベルの認証を参照: /ja/api/authentication

認証

Shannon Gatewayは、すべての保護されたエンドポイントに対して2つの認証方式をサポートしています。

APIキー認証

APIキーをX-API-Keyヘッダーに含めてください:

Bearerトークン認証

Authorization: BearerヘッダーでAPIキーまたはJWTトークンを使用することもできます:
両方の方式は同等です。ツールチェーンに合った方式をお選びください。

認証エラー

401 Unauthorized - 認証情報が欠落または無効です:
一般的な原因
  • X-API-KeyまたはAuthorizationヘッダーが欠落
  • 無効なAPIキー形式
  • 無効または期限切れのAPIキー
  • JWTトークンの期限切れ

リクエストヘッダー

必須ヘッダー

X-API-Key

目的: 認証
必須: はい(GATEWAY_SKIP_AUTH=1でない限り)
形式: 文字列

Content-Type (POSTリクエスト)

目的: リクエストボディの形式を指定
必須: POSTリクエストに対してはい
形式: application/json

オプションヘッダー

Idempotency-Key

目的: 重複タスクの提出を防ぐ
必須: いいえ(重要な操作には推奨)
形式: UUIDまたはユニークな文字列
キャッシュ期間: 24時間
:

traceparent

目的: W3C分散トレーシング
必須: いいえ(可視性のために推奨)
形式: {version}-{trace-id}-{parent-id}-{flags}
形式仕様:
  • version: 00(現在のバージョン)
  • trace-id: 32の16進数文字(128ビット)
  • parent-id: 16の16進数文字(64ビット)
  • flags: 2の16進数文字(サンプリング: 01、サンプリングなし: 00
:

tracestate

目的: ベンダー固有のトレースコンテキスト
必須: いいえ
形式: カンマ区切りのキーと値のペア

Cache-Control

目的: キャッシュ動作を制御
必須: いいえ
形式: 標準HTTPキャッシュディレクティブ

Last-Event-ID (SSEのみ)

目的: 特定のイベントからSSEストリームを再開
必須: いいえ
形式: イベントID文字列 — RedisストリームID(例: 1700000000000-0)または数値シーケンス(例: 42
SSE再接続に使用:

レスポンスヘッダー

標準レスポンスヘッダー

X-Workflow-ID

目的: Temporalワークフロー識別子
含まれる場所: POST /api/v1/tasks, GET /api/v1/tasks/
形式: 文字列(task_idと同じ)
使用例: Temporal UIでワークフローの実行を追跡

X-Session-ID

目的: マルチターン会話のセッション識別子
含まれる場所: POST /api/v1/tasks
形式: UUID文字列

Content-Type

目的: レスポンスボディの形式
含まれる場所: すべてのJSONレスポンス
形式: application/json
SSEの場合:

レート制限ヘッダー

X-RateLimit-Limit

目的: ウィンドウごとに許可される最大リクエスト数
含まれる場所: すべての認証済みリクエスト
形式: 整数

X-RateLimit-Remaining

目的: 現在のウィンドウ内の残りリクエスト数
含まれる場所: すべての認証済みリクエスト
形式: 整数

X-RateLimit-Reset

目的: レート制限がリセットされるUnixタイムスタンプ
含まれる場所: すべての認証済みリクエスト
形式: Unixタイムスタンプ(秒)
例 - レート制限を確認:

Retry-After

目的: 再試行までの待機時間(429レスポンス) 含まれる場所: 429 Too Many Requestsレスポンス フォーマット: 整数(秒)
例 - レート制限の処理:

CORSヘッダー

Access-Control-Allow-Origin

目的: CORSの許可されたオリジン 含まれる場所: すべてのレスポンス(開発モード) フォーマット: ドメインまたは *
本番環境: 特定のドメインを設定:

Access-Control-Allow-Methods

目的: 許可されたHTTPメソッド 含まれる場所: CORSプリフライトレスポンス フォーマット: カンマ区切りのメソッド

Access-Control-Allow-Headers

目的: 許可されたリクエストヘッダー 含まれる場所: CORSプリフライトレスポンス フォーマット: カンマ区切りのヘッダー

ヘッダーの例

最小リクエスト (GET)

完全リクエスト (POST)

Python - すべてのヘッダー

JavaScript - Fetch API

セキュリティベストプラクティス

1. APIキーを保護する

APIキーをバージョン管理にコミットしない:
安全な設定に保存:

2. 本番環境でHTTPSを使用

3. 定期的にAPIキーをローテーション

4. キーの有効期限を実装

5. APIキーの使用状況を監視

トラブルシューティング

認証失敗

問題: 401 Unauthorizedが返される 解決策:
  1. APIキーが含まれているか確認:
  2. APIキーのフォーマットを確認:
  3. 認証が無効になっているか確認:
  4. データベース内のキーを確認:

レート制限の問題

問題: 429 Too Many Requests 解決策:
  1. レート制限ヘッダーを確認する:
  2. 指数バックオフを実装する:
  3. レート制限を増加させる(必要に応じて):

冪等性の問題

問題: 重複したタスクが作成される 解決策:
  1. 常に Idempotency-Key を含める:
  2. 冪等性キーを保存する:
  3. Redis キャッシュを確認する:

関連ドキュメント

REST API 概要

完全な API リファレンス

タスクの提出

POST /api/v1/tasks

レート制限

レート制限の詳細

分散トレーシング

トレーシングの設定