Node.js 如何使用HMACSHA256节点js验证Xero webhook负载
我需要在我的node js项目中验证Xero webhook。这是Xero文档中验证的步骤: 每次我的签名和散列都不同,所以每次都返回401。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
因此,我未能完成从您描述的内容中接收的意图,我猜您无意中修改了请求主体。您需要接受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()
}