保护 Twitter Webhook

Securing Twitter Webhook

Twitter Docs所述 验证请求的步骤

  1. 使用您的消费者密码和传入的有效负载创建哈希 [​​=29=]。
  2. 将创建的哈希与 base64 编码的 x-twitter-webhooks-signature 值进行比较。

这是我的代码:

const buffer = Buffer.from(JSON.stringify(ctx.request.body))
const expectedHash = crypto.createHmac('sha256', TWITTER_CONSUMER_SECRET).update(buffer).digest('base64')

来自推特的 x-twitter-webhooks-signature header 和生成的散列不匹配。此外,https://twittercommunity.com/t/validating-the-webhook-signature-header-in-node-js/102525 处的 post 表示这是 JSON.stringify() 问题。我正在使用 koa 和 koa-body,如何解决哈希不匹配问题?

找到解决办法。使用 koa-bodyparser 而不是 koa-body 然后 sha256 of ctx.request.rawBody 匹配 header.