跳到主要内容
Didit 融资 750 万美元,打造身份与欺诈基础设施
Didit
返回博客
博客 · 2026年3月7日

使用Cloudflare Workers保护Webhook安全:Didit集成指南 (ZH)

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

作者:Didit更新于
securing-webhooks-with-cloudflare-workers-a-didit-integration-guide.png

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密钥。此密钥对于加密签名验证至关重要。以下是检索方法:

  1. 登录您的Didit控制台
  2. 导航到设置API密钥
  3. 复制您的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的逻辑。核心步骤是:

  1. 读取原始请求体:HMAC签名是从原始请求体生成的,因此在验证之前不要解析它至关重要。
  2. 验证HMAC-SHA256签名:X-Signature头中提供的签名与您使用DIDIT_WEBHOOK_SECRET和原始请求体生成的签名进行比较。
  3. 验证时间戳:检查X-Timestamp头以确保请求是最近的(例如,在5分钟内),以防止重放攻击。
  4. 解析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将实时通知发送到何处:

  1. 返回到您的Didit控制台
  2. 导航到工作流并选择您要配置的工作流(例如,使用Didit的身份验证和被动与主动活体检测的KYC工作流)。
  3. 在工作流设置中,找到Webhook URL配置。
  4. 输入您已部署的Cloudflare Worker的URL。
  5. 保存您的更改。

现在,每当身份验证会话完成或其状态更改时,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的免费层级免费开始验证身份。

身份与欺诈基础设施。

一个 API 即可实现 KYC、KYB、交易监控和钱包筛选。5 分钟即可集成。

让 AI 总结此页面
使用Cloudflare Workers保护Didit Webhook:集成指南.