我正在做一个项目,我试图处理来自 SendGrid 的打开和点击事件。我按照他们的 instructions 设置了一个 webhook,并成功接收了数据推送。当绕过签名验证时,我可以存储数据。
我正在使用签名的事件请求,可以看到签名和时间戳的标头:
"X-Twilio-Email-Event-Webhook-Signature"
"X-Twilio-Email-Event-Webhook-Timestamp"
我正在尝试将 SendGrid 提供给我的公钥转换为 ECDSA 字符串,以便我可以比较它并验证标头中的签名。
为此,我安装了 ECDSA 库。将公钥发送到转换函数时出现以下错误:
gmp_init(): Argument #1 ($num) is not an integer string
我也尝试过使用 SendGrid PHP 库,但是,它使用相同的 ECDSA 库并以相同的错误消息结束。它说...
$publicKey = 'base64-encoded public key';
$eventWebhook = new EventWebhook();
$ecPublicKey = $eventWebhook->convertPublicKeyToECDSA($publicKey);
SendGrid 提供的公钥按照 ECDSA 库的预期进行了 base64 编码。我试过发送编码、解码以及介于两者之间的所有内容:)
转换函数然后调用ECDSA类:
public function convertPublicKeyToECDSA($publicKey)
{
return PublicKey::fromString($publicKey);
}
任何帮助将不胜感激。