【问题标题】:Validate HMAC from Shopify Webhook (Using Hapijs)从 Shopify Webhook 验证 HMAC(使用 Hapijs)
【发布时间】:2019-12-31 00:31:22
【问题描述】:

我正在尝试在 webhook 中验证 Shopify 的 HMAC。这是我的控制器的外观:

  newOrder: {
    payload: {
      parse: false
    },
    handler: function(request, reply) {
      const hmac = request.headers['x-shopify-hmac-sha256'];
      let generatedHash = crypto
        .createHmac('sha256', utils.SHOPIFY_API_SECRET)
        .update(JSON.stringify(request.payload))
        .digest('base64');

      if (generatedHash == hmac) {
        console.log("Validated");
      } else {
        console.log("Not validated");
      }



      console.log(hmac, generatedHash.toString(), utils.SHOPIFY_API_SECRET)
      reply().code(200);
    },
    auth: false,
    notes: 'Shopifys new order webhook',
    tags: ['api'],
    id: 'newOrder'
  }

hmac 永远不会等于generatedHash。我认为它与 req.rawBody (来自 Express)有关,但我不知道如何从 Hapijs 获取相同的有效负载,或者我遗漏了一些东西。

我正在使用 HapiJs v14.0.0。

【问题讨论】:

    标签: javascript shopify hapijs hapi


    【解决方案1】:

    确保您在路由配置中将 payload.parse 设置为 false,并使用 request.raw.req 获取原始正文

    【讨论】:

    • request.raw.req 既不是缓冲区也不是字符串,Hapi 会抛出错误。如果我在控制器中使用pre,我可以使用request.payload,如果你配置了一个缓冲区:``` payload: { output: 'data', parse: false } ``` 不管怎样,生成的@987654326 @ 不等于 hmac 还是不知道我这里少了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多