AWS LambdaとAPI GatewayでDidit Webhookリスナーを構築する (JA)
TypeScript、AWS Lambda、API Gateway(Serverless Framework)を使用して、堅牢でスケーラブルなDidit Webhookリスナーを作成する方法を学びましょう。このガイドでは、リアルタイムのID検証のためのセットアップ、署名検証、安全なイベント処理について説明します。.

安全なWebhook統合Diditの共有シークレットキーを使用した堅牢なWebhook署名検証の実装は、Diditプラットフォームからの受信データの整合性と信頼性を確保し、なりすましや改ざんから保護するために不可欠です。
スケーラブルなサーバーレスアーキテクチャAWS LambdaとAPI GatewayをServerless Frameworkと組み合わせることで、Didit Webhookイベントを処理するための高度にスケーラブルで費用対効果の高いソリューションが提供され、手動の介入なしに変動する負荷に自動的に調整されます。
リアルタイムのIDワークフローDidit Webhookをリアルタイムで処理することで、ID検証結果に即座に対応し、動的なユーザーオンボーディング、不正検出、コンプライアンスアクションを促進し、運用効率を向上させます。
Diditの開発者ファーストアプローチDiditは、明確なAPIドキュメント、簡単なシークレットキーのローテーション、モジュラーアーキテクチャによりWebhook管理を簡素化し、開発者が無料でコアKYCとセットアップ費用なしでカスタムイベント駆動型ワークフローを迅速に構築およびデプロイできるようにします。
本人確認におけるWebhookの力
本人確認の世界では、リアルタイムのフィードバックが最も重要です。新規ユーザーのオンボーディング、AMLスクリーニング、年齢確認など、検証セッションの結果がリアルタイムでわかることで、動的な意思決定とシームレスなユーザーエクスペリエンスが可能になります。ここでWebhookが威力を発揮します。Diditは、ステータス更新のためにAPIを絶えずポーリングする代わりに、検証セッションの完了やステータスの変更など、重要なイベントが発生するたびに、指定されたエンドポイントに自動通知を送信します。このプッシュベースのモデルは、より効率的で、API呼び出しのオーバーヘッドを削減し、システムが常に最新の本人確認結果で更新されることを保証します。
Diditの強力な本人確認機能を統合するには、多くの場合、信頼性の高いWebhookリスナーのセットアップが必要です。このリスナーは、アプリケーションの目と耳として機能し、ID検証、生体認証、AMLスクリーニングの結果に関する重要な更新を受け取ります。適切に実装されたWebhookシステムは、最新のイベント駆動型アーキテクチャの礎石であり、検証結果に迅速に対応し、スムーズなユーザー体験を維持するために必要な俊敏性を提供します。
AWS LambdaとAPI GatewayでサーバーレスWebhookリスナーをセットアップする
スケーラブルで回復力のあるWebhookリスナーを構築するのは複雑な場合がありますが、AWS LambdaとAPI GatewayをServerless Frameworkと組み合わせることで、驚くほど簡単になります。このサーバーレスアプローチは、サーバーを管理する必要がないことを意味します。AWSがすべてのインフラストラクチャを処理し、需要に応じてリスナーを自動的にスケーリングします。Didit Webhookリスナーには、タイプセーフティと開発者の生産性のためにTypeScriptを使用します。
前提条件:
- AWSアカウント
- Node.jsとnpmがインストールされていること
- Serverless Frameworkがインストールされていること(
npm install -g serverless) - APIキーとWebhookシークレットを持つDiditアカウント(Didit Console -> Settings -> API Keysから取得)
プロジェクトのセットアップ:
まず、新しいServerlessプロジェクトを作成します。
serverless create --template aws-nodejs-typescript --path didit-webhook-listener
cd didit-webhook-listener
npm install
次に、serverless.ymlを構成して、Lambda関数とAPI Gatewayエンドポイントを定義しましょう。
service: didit-webhook-listener
provider:
name: aws
runtime: nodejs18.x
stage: dev
region: us-east-1
environment:
DIDIT_WEBHOOK_SECRET: ${ssm:/didit/webhook/secret}
functions:
handleDiditWebhook:
handler: src/handler.handleDiditWebhook
events:
- http:
path: webhook/didit
method: post
cors: true
plugins:
- serverless-offline
- serverless-dotenv-plugin
- serverless-ssm-fetch
DIDIT_WEBHOOK_SECRETをAWS SSM Parameter Storeから取得していることに注目してください。これは、シークレットを管理するためのベストプラクティスです。Didit Webhook Secretをそこに保存する必要があります。Diditを使用すると、APIまたはDidit Consoleを介してシークレットキーを簡単にローテーションできるため、優れたセキュリティ衛生が確保されます。
TypeScriptでの安全なWebhook処理の実装
Webhookリスナーの最も重要な側面はセキュリティです。受信リクエストが本当にDiditから発信されたものであり、改ざんされていないことを検証する必要があります。Diditは、この目的のために共有シークレットキーを提供しており、これを使用してWebhookのx-didit-signatureヘッダーに含まれるHMAC署名を検証します。
src/handler.tsを作成します。
import { APIGatewayProxyHandler } from 'aws-lambda';
import * as crypto from 'crypto';
const DIDIT_WEBHOOK_SECRET = process.env.DIDIT_WEBHOOK_SECRET || '';
export const handleDiditWebhook: APIGatewayProxyHandler = async (event) => {
if (!event.body) {
return { statusCode: 400, body: 'No body received' };
}
const signature = event.headers['x-didit-signature'];
if (!signature) {
console.warn('Webhook received without x-didit-signature header.');
return { statusCode: 403, body: 'Missing signature' };
}
try {
const expectedSignature = crypto
.createHmac('sha256', DIDIT_WEBHOOK_SECRET)
.update(event.body)
.digest('hex');
if (expectedSignature !== signature) {
console.error('Webhook signature mismatch. Expected:', expectedSignature, 'Received:', signature);
return { statusCode: 403, body: 'Invalid signature' };
}
const payload = JSON.parse(event.body);
console.log('Successfully verified and parsed Didit webhook:', payload);
// Implement your business logic here based on the webhook payload
// Examples: update user status, trigger further actions, store results
// For instance, if it's an ID Verification completion:
// if (payload.event_type === 'session.completed' && payload.data.workflow_type === 'kyc') {
// console.log('KYC Session Completed for vendor_data:', payload.data.vendor_data);
// // Process KYC results, update user profile, etc.
// }
return { statusCode: 200, body: 'Webhook received and processed' };
} catch (error) {
console.error('Error processing webhook:', error);
return { statusCode: 500, body: 'Internal server error' };
}
};
このコードでは、DIDIT_WEBHOOK_SECRETを使用して生のリクエストボディのHMAC SHA256ハッシュを計算し、それをDiditが提供するx-didit-signatureヘッダーと比較します。一致しない場合、リクエストは拒否され、不正アクセスやなりすましイベントが防止されます。この堅牢な検証プロセスは、特にDiditのID検証、顔認証、またはAMLスクリーニングサービスからの機密データを扱う場合、ID検証ワークフローのセキュリティと整合性を維持するために不可欠です。
DiditにWebhookを送信するように設定する
Lambda関数がデプロイされ、API GatewayエンドポイントURLが利用可能になったら、最後のステップはDiditにWebhookを送信する場所を伝えることです。これは、Didit Management APIまたはDidit Business Consoleを介して簡単に行うことができます。
Didit Management APIを介して:
PATCH /v3/webhook/エンドポイントを使用して、Webhook設定をプログラムで更新できます。これにより、webhook_urlを設定し、webhook_version(v3が推奨)を指定し、secret_shared_keyを安全にローテーションすることもできます。
curl -X PATCH https://verification.didit.me/v3/webhook/ \
-H "Content-Type: application/json" \
-H "x-api-key: YOUR_DIDIT_API_KEY" \
-d '{
"webhook_url": "YOUR_API_GATEWAY_ENDPOINT",
"webhook_version": "v3"
}'
YOUR_DIDIT_API_KEYを実際のDidit APIキーに、YOUR_API_GATEWAY_ENDPOINTをServerless関数をデプロイした後にAWS API Gatewayが提供するURLに置き換えてください。
Didit Business Consoleを介して:
または、Didit Consoleに移動し、Settings -> Webhooksにアクセスして、API GatewayエンドポイントURLを所定のフィールドに貼り付けるだけです。ここでWebhookシークレットキーを表示およびローテーションすることもできます。Diditのモジュラー設計により、これらの重要な統合の構成が簡単になり、コアアプリケーションの構築に集中できます。
Diditの支援
Diditは、高度な本人確認をシンプルかつ安全に統合できる、AIネイティブで開発者ファーストのIDプラットフォームを提供します。当社のモジュラーアーキテクチャにより、ID検証(OCR、MRZ、バーコード)、受動的および能動的な生体認証、1:1顔認証、AMLスクリーニングと監視、年齢推定など、必要なコンポーネントを正確に選択できます。無料のコアKYCとセットアップ費用なしで、Diditはあらゆる規模の企業が法外な費用なしで堅牢なIDソリューションを実装できるようにします。
当社の包括的なAPIドキュメントと即時サンドボックス環境により、開発者は迅速に作業を開始でき、当社のWebhookシステムは、実証されているように、信頼性とセキュリティのために設計されています。Diditを使用すると、グローバルな検証ネットワーク、オーケストレーションされたワークフロー、構造化されたIDデータにアクセスでき、すべてクリーンなAPIを介して提供されます。これにより、Diditの強力なバックエンドとシームレスに統合し、すべての本人確認ニーズに対してリアルタイムの更新を保証するカスタムWebhookリスナーを自信を持って構築できます。
すぐに始められますか?
Diditの動作をすぐに確認したいですか?今すぐ無料デモを予約してください。
Diditの無料ティアで、無料で本人確認を開始しましょう。