【问题标题】:How to validate HMAC the shopify webhook - nodejs Lambda如何验证 shopify webhook 的 HMAC - nodejs Lambda
【发布时间】:2022-02-18 13:06:00
【问题描述】:

我无法使用“crypto-js”包验证来自 shopify 的 webhook 响应。

我正在使用:“Node.js、AWS-Lambda、crypto-js”和以下代码进行验证

var CryptoJS = require("crypto-js");
var getRawBody = require("raw-body");
var Buffer = require('buffer/').Buffer  // note: the trailing slash is important!
    
exports.handler = async (event, context) => {
        let hmac = event.hmac;
       
        const bodyString = Buffer.from(event.body, "utf8").toString();
        var bodyForVerification = bodyString.replace('/\\/g', '\\\\');
    
        let firma = CryptoJS.HmacSHA256(bodyForVerification, "****");
        var hashInBase64 = CryptoJS.enc.Base64.stringify(firma);
        let calculatedHmacBase = hashInBase64.toString(CryptoJS.enc.hex);
        if(hmac == calculatedHmacBase {
        console.log("verificado");    
    }
    };

HMAC 不同..

【问题讨论】:

    标签: node.js aws-lambda shopify shopify-api-node


    【解决方案1】:

    我将此中间件用于我在 Shopify 上的公共和私人应用程序, 使用加密,它已被弃用,但适用于我的代码。

    const crypto = require('crypto');
    const verify = function (req, res, next) {
      if (req.query.shop) {
        if (!req.query.signature) {
          return false;
        }
        console.log(req.query);
        const signature = req.query.signature;
        const sharedSecret = process.env.SHOPIFY_SHARED_SECRET;
        const def = req.query;
        delete def.signature;
        const sortedQuery = Object.keys(def).map(key => `${key}=${Array(def[key]).join(',')}`).sort().join('');;
        const calculatedSignature = crypto.createHmac('sha256', sharedSecret).update(sortedQuery).digest('hex');
        if (calculatedSignature === signature) {
          console.log('validated');
          return next();
        }
        console.log('not validated');
        return false;
      }
    };
    module.exports = verify;

    【讨论】:

    • 嗨,¿我怎样才能获得 lib 加密?...我正在寻找它,但没有找到它。在 npm 中已弃用,我无法下载该模块以便能够上传到 lambda
    • 只需输入 npm i crytpo
    • 写“npm install crypto”。我只下载了两个文件——“package.json”和“README”。在文件中它说“这个包不再受支持并且已被弃用。为了避免恶意使用,npm 会挂在包名上。”..
    • 它不会产生任何问题,请尝试运行您的代码以解决任何其他问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多