使用AWS Lambda和API Gateway构建Didit Webhook监听器 (ZH)
学习如何使用TypeScript、AWS Lambda和API Gateway(Serverless Framework)创建强大、可扩展的Didit Webhook监听器。本指南涵盖了设置、签名验证和安全事件处理,以实现实时身份验证。.

安全的Webhook集成实现强大的Webhook签名验证,使用Didit的共享密钥对于确保来自Didit平台的传入数据的完整性和真实性至关重要,可防止欺骗和篡改。
可扩展的无服务器架构利用AWS Lambda和API Gateway与Serverless Framework相结合,为处理Didit Webhook事件提供了高度可扩展且经济高效的解决方案,可根据不同负载自动调整,无需人工干预。
实时身份工作流实时处理Didit Webhook可以即时响应身份验证结果,促进动态用户入职、欺诈检测和合规性操作,从而提高运营效率。
Didit的开发者优先方法Didit通过清晰的API文档、简便的密钥轮换和模块化架构简化了Webhook管理,使开发人员能够快速构建和部署自定义事件驱动工作流,提供免费的核心KYC且无设置费用。
Webhooks在身份验证中的强大作用
在身份验证领域,实时反馈至关重要。无论是新用户入职、AML筛选还是年龄验证,在验证会话发生时了解其结果,都可以实现动态决策和无缝的用户体验。这就是Webhooks的用武之地。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控制台 -> 设置 -> API密钥)
项目设置:
首先,创建一个新的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
请注意,我们从AWS SSM参数存储中获取DIDIT_WEBHOOK_SECRET,这是管理秘密的最佳实践。您需要将您的Didit Webhook密钥存储在那里。Didit允许您通过API或Didit控制台轻松轮换您的密钥,确保良好的安全卫生。
在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筛选服务的敏感数据时。
配置Didit发送Webhooks
一旦您的Lambda函数部署完毕并拥有API Gateway端点URL,最后一步是告诉Didit在哪里发送其Webhooks。这可以通过Didit管理API或Didit商业控制台轻松完成。
通过Didit管理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商业控制台:
或者,导航到Didit控制台,转到设置 -> Webhooks,然后将您的API Gateway端点URL粘贴到指定字段中。您还可以在此处查看和轮换您的Webhook密钥。Didit的模块化设计确保了这些重要集成的配置简单明了,让您可以专注于构建您的核心应用程序。
Didit如何提供帮助
Didit提供了一个AI原生、开发者优先的身份平台,使集成高级身份验证变得简单安全。我们的模块化架构允许您选择所需的精确组件,从ID验证(OCR、MRZ、条形码)和被动及主动活体检测到1:1人脸匹配、AML筛选与监控以及年龄估计。通过提供免费的核心KYC且无设置费用,Didit使各种规模的企业能够以不高的成本实施强大的身份解决方案。
我们全面的API文档和即时沙盒环境确保开发人员可以快速入门,而我们的Webhook系统,如所示,旨在实现可靠性和安全性。通过Didit,您可以访问全球验证网络、编排工作流和结构化身份数据,所有这些都通过清晰的API提供。这意味着您可以自信地构建自定义Webhook监听器,与Didit强大的后端无缝集成,确保满足您所有身份验证需求的实时更新。
准备好开始了吗?
准备好亲身体验Didit了吗?立即获取免费演示。
使用Didit的免费套餐开始免费验证身份。