如何解决从 Node.js 到 PHP 的 Webhook 真实性
我需要帮助将此 Node.js
代码翻译成 PHP
。它主要用于验证我的标头上的签名是否与使用 base64
和 HMAC-SHA256
编码的签名相同。
const crypto = require('crypto');
const timestamp = "1570350275357";
const msg = {'key1':'world','key2':'world'};
const secretKey = "mysecretsecret";
const decodedKey = Buffer.from(secretKey,'base64').toString('utf8');
const signature = crypto.createHmac('SHA256',decodedKey).update(timestamp + '.' + msg).digest('base64');
const signatureHeader = "+DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=";
assert(signature === signatureHeader);
所以我的请求正文是 {'key1':'world','key2':'world'}
,时间戳 (x-duda-signature-timestamp
标头)是 1570350275357
和一个密钥 mysecretsecret
。
它还为我的签名 base64(hmac-sha256(secret-key,timestamp + "." + message))
计算结果 +DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=
,这也是要在请求的此 x-duda-signature header
上找到的值。
我已经尝试将这些部分放在 PHP 上,但它不会返回与我的签名标头 +DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=
类似的签名。
$getHeaders = apache_request_headers();
$timestamp = "1570350275357";
$signatureHeader = "+DCfT1wIMUiaZnlZB4u59/d5wkXKA89lv67Ov66vnyc=";
$secretKey = "mysecretsecret";
//Request Body
$message = '{'key1':'world','key2':'world'}';
$signature = base64_encode(hash_hmac('sha256',$timestamp.".".$message,$secretKey));
print_r($signature); // the value should be equal to ```$signatureHeader```
知道我哪里出错了吗?提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。