Webhook签名不匹配(Nodejs)

42fyovps  于 2022-11-22  发布在  Node.js
关注(0)|答案(1)|浏览(147)

我尝试使用HMAC和sha256算法以及base64来计算来自Zum rails API的webhook签名,有效载荷是JSON stringify和utf8.string,不幸的是,签名并不是每次都与我的计算匹配。如果我从我的前端发出请求,签名并不经常匹配。我尝试从Postman发出请求,它总是匹配。我在一个公共webhook平台上尝试了同样的签名,签名匹配。我检查了文档。
问:为什么当请求来自我的前端而不是签名时,它无法匹配,而当我使用公共webhook或 Postman 时,它不匹配?

aiazj4mn

aiazj4mn1#

这个问题是来自http请求的字符串,我将其重新转换为字符串,导致json项交换位置,仅在某些情况下与hmac机密匹配。
我通过转换原始主体来验证webhook签名,然后直接在Hmac中使用req.rawBody作为有效负载,而不进行任何重整。

app.use(
   express.json({
      // We need the raw body to verify webhook signatures.

verify: function (req, res, buf) {

if (req.originalUrl.includes('webhook')) {

req.rawBody = buf.toString();
        
  }

  },

  })
);
const hash = crypto.createHmac('sha256', secret).update(req.rawBody, 'utf8').digest('base64')`;

相关问题