Node.js 如何使用HMACSHA256节点js验证Xero webhook负载

Node.js 如何使用HMACSHA256节点js验证Xero webhook负载,node.js,webhooks,hmac,xero-api,xero,Node.js,Webhooks,Hmac,Xero Api,Xero,我需要在我的node js项目中验证Xero webhook。这是Xero文档中验证的步骤: 每次我的签名和散列都不同,所以每次都返回401。 因此,我未能完成从您描述的内容中接收的意图,我猜您无意中修改了请求主体。您需要接受webhook事件中的原始请求主体,而不进行修改。如果修改了这个主体,您的代码将无法验证签名,并且无法通过Xero的“接收意图”验证。查看此文件了解详细信息 var crypto = require("crypto") function getHmacS

我需要在我的node js项目中验证Xero webhook。这是Xero文档中验证的步骤:

每次我的签名和散列都不同,所以每次都返回401。
因此,我未能完成从您描述的内容中接收的意图,我猜您无意中修改了请求主体。您需要接受webhook事件中的原始请求主体,而不进行修改。如果修改了这个主体,您的代码将无法验证签名,并且无法通过Xero的“接收意图”验证。查看此文件了解详细信息

var crypto = require("crypto")
function getHmacSha256(message, secret) {
        return crypto.createHmac("sha256", secret).update(message).digest("base64")
}

// webhookPayload and signature get from webhook body and header
const webhookPayload = {
  events: [],
  firstEventSequence: 0,
  lastEventSequence: 0,
  entropy: 'OSHPXTUSXASRFBBCJFEN'
}
const signature = "OXLaeyZanKI5QDnLkXIVB35XrZygYsPMeK8WfoXUMU8="


const myKey = "1y5VYfv7WbimUQIMXiQCB6W6TKIp+5ZZJNjn3Fsa/veK5X/C8BZ4yzvPkmr7LvuL+yfKwm4imnfAB5tEoJfc4A=="

var hash = getHmacSha256(JSON.stringify(webhookPayload), myKey)

//If the payload is hashed using HMACSHA256 with your webhook signing key and base64 encoded, it should match the signature in the header.

if (signature === hash) {
     return res.status(200).end()
}else{
     return res.status(401).end() 
}