GET /api/v2/events への長時間維持する接続を開き、Server-Sent Events (SSE) ストリームとしてイベントを受け取ります。いつ接続するか、切断後にどのように再開するか、どのくらいの速度でイベントを取り込むかは、すべてアプリケーション側で制御できます。
このアプローチは、次のような場合に役立ちます。
- webhook エンドポイントを用意せずに、自分のペースでイベントを処理したい。
- バックフィルや復旧のために、特定の時点からイベントを再生したい。
- プッシュ型の配信よりもポーリングを好むシステムと統合したい。
Events API の仕組み
アプリケーションが Events API に接続すると、SSE メッセージのストリームを受信します。各メッセージには、オフセット として機能するid フィールドが含まれます。接続が切断された場合、アプリケーションは再接続し、最後に受信した オフセット を渡します。Auth0 はその位置から配信を再開するため、イベントが失われることはありません。
SSE ストリームには、次のメッセージタイプが含まれます。
SSEストリームの例
前提条件
始める前に、以下を用意してください。-
Events が有効化されている Auth0 テナント。利用可能な Event Stream 接続数は、ご利用のプランによって異なります。
-
read:eventsスコープを持つ Management API アクセストークン。詳しくは、Management API Access Tokens をご覧ください。
Events API に接続する
テナントの events エンドポイントへの SSE 接続を確立します。次の例ではcurl を使用します。
- Auth0 CLI
- cURL
Auth0 CLI を使用する場合は、まだであればこのコマンドを実行する前にCLI セッションをセットアップして認証してください。
クエリパラメータ
クエリパラメータを使用して、ストリームを絞り込んだり、再開したりできます。- Auth0 CLI
- cURL
切断後の再開
SSE 接続は、ネットワークの問題、トークンの有効期限切れ、サーバー側での接続の切り替え (Auth0 では負荷分散のため、通常は数分ごとに定期的に接続を閉じます) など、さまざまな理由で切断されることがあります。標準的な SSE クライアントライブラリは、再接続時に最後のオフセットを送信することで、こうした切断を透過的に処理します。 再接続時にオフセットを指定する方法は 2 つあります。Last-Event-IDヘッダー — 標準的な SSE の再接続メカニズムです。ほとんどの SSE クライアントライブラリは、再接続時にこのヘッダーを自動的に設定します。fromクエリパラメータ — クライアントがLast-Event-IDヘッダーをサポートしていない場合は、こちらを使用します。
Last-Event-ID ヘッダーが優先されます。
- Auth0 CLI
- cURL
すべてのメッセージ (
offset-only メッセージを含む) の最新の id 値を永続ストレージに保存してください。アプリケーションが再起動した場合は、保存したオフセットを使って中断した箇所から配信を再開します。メッセージの種類を処理
実際のイベント
event フィールドが既知のイベントタイプ (たとえば user.created) に一致するメッセージには、data フィールドにイベントの完全なペイロードが含まれます。JSON を解析し、ビジネスロジックに従ってイベントを処理してください。
オフセットのみのメッセージ
Auth0 は、ストリーム内の位置を進めるために、一定間隔 (ハートビートの頻度) でoffset-only メッセージを送信します。これらのメッセージにはイベント ペイロード は含まれません。受信したら保存しているオフセットを更新してください。そうすることで、今後再接続した際に、すでに通過したイベントが再送されるのを防げます。
エラーメッセージ
event: error メッセージは、オフセットの有効期限切れやサーバー側の問題など、回復不能な問題を示します。このメッセージを受信すると、ストリームは終了します。アプリケーションではエラーを記録したうえで、適切なオフセットまたは新しい from_timestamp を指定して再接続する必要があります。
ハートビート
: で始まる行は、ハートビート用のSSEコメントです。これにより、プロキシやロードバランサーを経由しても接続を維持できます。特別な処理は必要ありません。
サーバー側での接続の切り替え
Auth0 では、負荷分散のために SSE 接続を定期的に切断します (通常は数分ごと) 。これは想定された動作であり、エラーではありません。標準的な SSE クライアントライブラリ (eventsource npm パッケージを含む) は、Last-Event-ID ヘッダーを使って自動的に再接続するため、アプリケーションはイベントを取りこぼすことなく正しいオフセットから再開できます。
カスタムの SSE クライアントを実装する場合は、最新のオフセットを保持し、その値を使って再接続することで、接続の切断に適切に対応できるようにしてください。
コンシューマーを実装する
以下の Node.js の例では、イベントを処理し、オフセットをファイルに保存する最小限の Events API コンシューマーを示しています。eventsource npm パッケージは SSE プロトコルを実装しており、Last-Event-ID ヘッダーを使って自動的に再接続します。別の SSE ライブラリを使用する場合は、自動再接続とオフセットの引き継ぎに対応していることを確認してください。