使用Cloudflare Workers保护Webhook安全:Didit集成指南 (ZH)
了解如何利用Cloudflare Workers为Didit身份验证构建一个强大且安全的Webhook端点。本指南涵盖HMAC签名验证、时间戳验证以及保护您的最佳实践。.

Cloudflare Workers增强安全性Cloudflare Workers为安全处理Webhook提供了理想的无服务器环境,提供边缘级保护和高效的签名验证。
HMAC签名验证至关重要始终验证传入Webhook的HMAC-SHA256签名,以确保其真实性和完整性,防止未经授权的数据注入或篡改。
时间戳验证缓解重放攻击实施时间戳检查,确保Webhook请求是新鲜的,防止恶意行为者重发旧的、合法的请求导致的重放攻击。
Didit简化安全身份验证Didit的AI原生平台为所有身份验证产品提供强大、实时的Webhook通知,确保为您的应用程序提供安全可靠的数据传输。
在当今互联的数字环境中,Webhook是服务之间实时通信的基石。它们能够针对身份验证结果、支付确认和用户活动等事件提供即时通知。然而,Webhook的便利性也带来了一个关键的安全挑战:确保接收数据的真实性和完整性。如果没有适当的防护措施,您的应用程序可能会容易受到欺骗、篡改或重放攻击。
本指南将引导您使用Cloudflare Workers为Didit身份验证构建一个安全的Webhook端点。Cloudflare Workers提供了一个强大的、位于边缘的无服务器平台,非常适合以最小的延迟和最大的可靠性处理和保护Webhook。Didit作为一个AI原生身份平台,依赖安全的Webhook来提供实时KYC通知,因此这种集成对于任何利用Didit强大身份验证解决方案的企业都至关重要。
为什么要保护您的Webhook?
想象一下,收到一个Webhook通知,错误地声称用户通过了身份验证,而实际上他们失败了。或者恶意行为者重放一个旧的、合法的Webhook,多次触发您系统中的某个操作。这些场景都突显了Webhook安全性的关键需求。
Webhook端点面临的主要威胁包括:
- 欺骗:攻击者发送虚假Webhook,冒充Didit,诱骗您的系统执行未经授权的操作。
- 篡改:攻击者拦截合法Webhook,并在其到达您的服务器之前修改其负载。
- 重放攻击:攻击者捕获合法Webhook,并在以后重新发送它以再次触发相同的操作,可能导致重复交易或其他问题。
保护您的Webhook涉及验证发送者的身份并确保数据未被更改。Didit通过HMAC-SHA256签名和时间戳验证提供了强大的机制,我们将在Cloudflare Worker中实现这一点。
设置您的Didit Webhook密钥
在验证Didit Webhook之前,您需要唯一的Webhook密钥。此密钥对于加密签名验证至关重要。以下是检索方法:
- 登录您的Didit控制台。
- 导航到设置 → API密钥。
- 复制您的Webhook密钥。
此密钥应安全存储,切勿公开。对于Cloudflare Workers,最好将其存储为Worker密钥或环境变量。
为Didit Webhook构建安全的Cloudflare Worker
Cloudflare Workers是运行在Cloudflare全球网络上靠近用户的JavaScript、TypeScript或WebAssembly应用程序。这使得它们能够以极快的速度和可扩展性处理传入的Webhook请求。以下是创建用于安全处理Didit Webhook的Worker的分步指南。
1. 创建您的Cloudflare Worker
首先,设置一个新的Cloudflare Worker项目。您可以使用wrangler CLI工具完成此操作:
npx wrangler generate didit-webhook-handler
cd didit-webhook-handler
2. 将您的Didit Webhook密钥添加为Cloudflare密钥
为了确保您的Webhook密钥安全,请将其添加为Worker的密钥:
npx wrangler secret put DIDIT_WEBHOOK_SECRET
当提示时,粘贴您从Didit控制台获取的Webhook密钥。
3. 在index.js中实现Webhook逻辑
您的Worker的index.js文件将包含接收、验证和处理Didit Webhook的逻辑。核心步骤是:
- 读取原始请求体:HMAC签名是从原始请求体生成的,因此在验证之前不要解析它至关重要。
- 验证HMAC-SHA256签名:将
X-Signature头中提供的签名与您使用DIDIT_WEBHOOK_SECRET和原始请求体生成的签名进行比较。 - 验证时间戳:检查
X-Timestamp头以确保请求是最近的(例如,在5分钟内),以防止重放攻击。 - 解析JSON并处理:如果验证通过,解析JSON体并处理身份验证结果。
以下是Worker代码的基本示例:
import { createHmac } from 'crypto'; // Cloudflare Workers provide 'crypto' module
export default {
async fetch(request, env, ctx) {
if (request.method !== 'POST') {
return new Response('Method Not Allowed', { status: 405 });
}
const diditWebhookSecret = env.DIDIT_WEBHOOK_SECRET;
if (!diditWebhookSecret) {
return new Response('Webhook secret not configured', { status: 500 });
}
const signature = request.headers.get('X-Signature');
const timestamp = request.headers.get('X-Timestamp');
const rawBody = await request.text();
if (!signature || !timestamp || !rawBody) {
return new Response('Missing required webhook headers or body', { status: 400 });
}
// 1. Validate Timestamp (e.g., within 5 minutes)
const FIVE_MINUTES_IN_SECONDS = 300;
const currentTimestamp = Math.floor(Date.now() / 1000);
if (Math.abs(currentTimestamp - parseInt(timestamp, 10)) > FIVE_MINUTES_IN_SECONDS) {
return new Response('Webhook timestamp too old or in the future', { status: 403 });
}
// 2. Verify HMAC-SHA256 Signature
const expectedSignature = createHmac('sha256', diditWebhookSecret)
.update(`${timestamp}.${rawBody}`)
.digest('hex');
if (expectedSignature !== signature) {
return new Response('Invalid webhook signature', { status: 403 });
}
// 3. Process the webhook payload
try {
const payload = JSON.parse(rawBody);
// Log or process the payload, e.g., update user status in your database
console.log('Received Didit webhook:', payload);
// Example: Accessing verification status
if (payload.event === 'session.completed' && payload.data.status === 'approved') {
console.log(`User ${payload.data.vendor_data} successfully verified.`);
// Trigger further actions like granting access or updating user profile
}
// Didit offers various products like ID Verification, Passive & Active Liveness, and AML Screening.
// The webhook payload will reflect results from these checks.
return new Response('Webhook processed successfully', { status: 200 });
} catch (error) {
console.error('Error parsing webhook body:', error);
return new Response('Error parsing JSON payload', { status: 400 });
}
},
};
4. 部署您的Worker
代码准备就绪后,将其部署到Cloudflare:
npx wrangler deploy
部署后,Cloudflare将为您提供Worker的URL。这就是您将在Didit控制台中配置的用于接收Webhook的端点。
配置Didit发送Webhook
部署了安全的Cloudflare Worker后,最后一步是告诉Didit将实时通知发送到何处:
- 返回到您的Didit控制台。
- 导航到工作流并选择您要配置的工作流(例如,使用Didit的身份验证和被动与主动活体检测的KYC工作流)。
- 在工作流设置中,找到Webhook URL配置。
- 输入您已部署的Cloudflare Worker的URL。
- 保存您的更改。
现在,每当身份验证会话完成或其状态更改时,Didit都会向您的Cloudflare Worker发送安全的Webhook通知,然后Worker将对其进行验证和处理。
Didit如何提供帮助
Didit的设计以安全性和开发者体验为核心。我们的AI原生身份平台提供模块化架构,让您轻松组合复杂的验证工作流。在Webhook方面,Didit通过以下方式简化了流程:
- 提供安全的Webhook通知:所有Didit Webhook都使用HMAC-SHA256签名并包含时间戳,确保您接收到的数据的真实性和完整性。这对于身份验证、1:1人脸匹配和AML筛选等数据准确性至关重要的产品至关重要。
- 实时更新:获取验证过程每个阶段的即时通知,允许您的应用程序立即对用户验证结果做出反应。
- 全面的数据:Webhook负载包含有关验证会话的所有必要详细信息,包括来自各种Didit产品(如被动与主动活体检测、电话和电子邮件验证以及地址证明)的结果。
- 开发者优先的方法:Didit提供即时沙盒、清晰的公共文档和简洁的API,使集成变得简单。我们的免费核心KYC层和按成功检查付费模式,无需设置费用,让您轻松入门和扩展。
通过将Didit Webhook与安全的Cloudflare Worker集成,您可以建立一个弹性且值得信赖的实时身份验证更新渠道,从而保护您的业务和用户。
准备好开始了吗?
准备好亲身体验Didit了吗?立即获取免费演示。
使用Didit的免费层级免费开始验证身份。