【问题标题】:Webhook Signature not matching (Nodejs)Webhook 签名不匹配 (Nodejs)
【发布时间】:2022-11-19 15:26:13
【问题描述】:

我正在尝试使用带 sha256 算法和 base64 的 HMAC 来计算 Zum rails API 的 webhook 签名,有效负载是 JSON stringify 和 utf8。 string,对我来说不幸的是,签名每次都与我的计算不匹配。如果我从前端发出请求,签名通常不会匹配。我试图从 Postman 发出请求并且它总是匹配,我尝试使用与签名匹配的公共 webhook 平台使用相同的签名。我检查了文档。

问题:为什么当请求来自我的前端但签名时它无法匹配,而当我使用公共 webhook 或邮递员时却不匹配?

【问题讨论】:

    标签: node.js webhooks hmacsha256


    【解决方案1】:

    问题是来自 http 请求的字符串,我将其重新转换为字符串,导致 json 项目切换位置,有时仅匹配 hmac 机密。

    我想通了,通过转换原始主体来验证 webhook 签名。然后我直接在Hmac中使用req.rawBody作为payload 无需重新格式化。

    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')`;
    

    【讨论】: