メインコンテンツに移動

Webhooksの概要

Webhooksは、チャレンジステータスの変更や確認結果など、k-IDの重要なイベントについてサーバーに通知します。各プロダクトの開発者設定で、Compliance Studioでwebhook URLとシークレットを設定します。

ペイロードにはeventTypedataオブジェクトが含まれます。ペイロードスキーマについては、イベントタイプを参照してください。

イベントタイプ

イベントタイプ説明
Challenge.StateChange保護者の同意チャレンジの状態が変更されたときに発行される
Verification.Result確認試行の結果とともに発行される
Verification.Revoke以前に合格した認証が取り消されたときに発行される
Account.Deleteアカウントが削除されたときに発行される
AgeAssurance.ResultAge Assurance評価の結果とともに発行される(非推奨、Verification.Resultに置き換え)
ParentalConsent.Granted保護者の同意が付与されたときに発行される
Session.ChangePermissions親によってセッション権限が変更されたときに発行される
Session.Deleteセッションが削除されたときに発行される
Testwebhookが正しく機能していることを確認するために使用される

署名の検証

設定されたwebhookシークレットでwebhookリクエストを検証します。

ヘッダー

各リクエストとともに送信されるヘッダー:

  • X-Signature-Timestamp: UNIXエポック秒
  • X-Signature-Hmac-Sha256: (タイムスタンプ + 生の本文)のHMAC SHA-256。webhookシークレットをキーとして使用し、16進数エンコード(小文字)

期待される動作

  • 有効な署名の場合は200を返す
  • 無効な署名の場合は401を返す

実装の詳細については、Webhookリクエストの検証を参照してください。

配信、リトライ、リカバリー

配信保証

k-IDはat-least-once(少なくとも1回)の保証でwebhookイベントを配信します。エンドポイントは同じイベントを複数回受信する可能性があるため、ハンドラーを冪等に設計してください。data.idフィールド(確認またはチャレンジID)を使用して、既に処理したイベントの重複を排除してください。

リトライポリシー

エンドポイントが200以外のステータスコードを返すか、リクエストがタイムアウトした場合、k-IDは2回リトライします:

試行前回の試行からの遅延
1回目のリトライ5秒
2回目のリトライ10秒

最初の試行と2回のリトライ(合計3回の試行)の後、k-IDはそのイベントの配信を停止します。

受信できなかったwebhookの処理

サーバーがダウンしていたか、webhookが正常に配信されなかった場合、フローを開始した際に保存したIDを使用して、サーバーから関連するステータスエンドポイントをポーリングして回復してください:

推奨パターン

フローを開始した際に受け取る確認またはチャレンジIDを常に保存してください。webhookハンドラーが想定された時間内に結果を受信しない場合、対応するget-statusエンドポイントを呼び出して現在の状態を取得します。このリダイレクト→ポーリングのパターンにより、すべてのwebhook配信が失敗しても結果を見逃すことがありません。

冪等性

webhookイベントは冪等です。同じイベントは複数回配信される可能性があります。例えば、ネットワークの問題により配信ステータスが曖昧になった場合などです。イベントに対してアクションを起こす前に、そのイベントが既に処理済みかどうかを常に確認してください。簡単な方法として、処理済みのイベントID(data.idフィールド)を追跡して重複をスキップすることができます。