如何解决创建 HMAC BodyHash Sha256 nodejs
我正在尝试与使用 HMAC 身份验证的服务 (paysera https://developers.paysera.com/) 集成。我设法集成了每个 GET
端点。然而,当涉及到 POST
请求时,代码似乎不起作用。
createHMACAuth(data) {
let bodyHash = crypto.createHash('sha256').update(JSON.stringify(data)).digest('base64');
let method = 'POST';
let path = `/rest/v1/transfers`;
let ts = moment().unix();
let nonce = GUID(32);
let port = 443;
let macString = `${ts}\n${nonce}\n${method}\n${path}\n${host}\n${port}\n${bodyHash || ''}\n`;
let my_mac_key = 'my_mac_key';
let my_mac_id = 'my_mac_id';
let mac = crypto.createHmac('sha256',my_mac_key).update(macString).digest('base64');
let headerString = `MAC id="${my_mac_id}",ts="${ts}",nonce="${nonce}",mac="${mac}",ext="body_hash=${bodyHash}"`;
return headerString;
}
let data = {
key: 'value',otherkey: 'othervalue'
};
let headers = {
Host: 'wallet.paysera.com','User-Agent': `Paysera node.js library`,mac_id: 'my_mac_id',Authorization: createHMACAuth(data);
};
POST_REQUEST(`${headers.host}/rest/v1/transfers`,data,headers,(err,res) => console.log(res))
我得到的回应是:
{
error: 'unauthorized',error_description: 'Given MAC content body hash does not match actual hash of content'
}
任何帮助将不胜感激!
解决方法
我在生成 body_hash 时出错
修复
createHMACAuth(method,path,data) {
let bodyHash,ext;
if (method === 'POST') {
ext = `body_hash=${encodeURIComponent(this.createHash(JSON.stringify(data)))}`;
}
this.method = method;
this.path = `/${path}`;
let nonce = `${U.GUID(32)}`;
let port = 443;
let macString = `${this.ts}\n${nonce}\n${this.method}\n${this.path}\n${this.host}\n${port}\n${ext || ''}\n`;
let mac = this.createHMACHash(macString);
let headerString = `MAC id="${this.mac_id}",ts="${this.ts}",nonce="${nonce}",mac="${mac}"`;
if (method === 'POST') headerString += `,ext="${ext}"`
return headerString;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。