gpt4 book ai didi

javascript - 验证 Mandrill 的 X-Mandrill 签名

转载 作者:搜寻专家 更新时间:2023-10-31 23:13:49 26 4
gpt4 key购买 nike

我正在开发一个 Node.js 应用程序,但我正在努力验证 Mandrill Webhook 请求。

如此处所述http://help.mandrill.com/entries/23704122-Authenticating-webhook-requests在 PHP 中应该是这样的:

/**
* Generates a base64-encoded signature for a Mandrill webhook request.
* @param string $webhook_key the webhook's authentication key
* @param string $url the webhook url
* @param array $params the request's POST parameters
*/
function generateSignature($webhook_key, $url, $params) {
$signed_data = $url;
ksort($params);
foreach ($params as $key => $value) {
$signed_data .= $key;
$signed_data .= $value;
}

return base64_encode(hash_hmac('sha1', $signed_data, $webhook_key, true));
}

所以我想到了这个:

var url = "http://....";
var post = "<POST Data>";
require('crypto').createHmac("SHA1", "<Webhook Signature Key>").update(url+post).digest("base64");

不幸的是,这不起作用。我得到一个不同的签名。

POST 数据经过 urlencoded,例如:

mandrill_events=%5B%7B%22event%22%3A%22inbound ...

网址解码:

mandrill_events=[{"event":"inbound ...

Mandrill 文档说,不应包含定界符,所以这是我使用的字符串(没有 =):

mandrill_events[{"event":"inbound ...

对此有什么想法吗?

PS:我仔细检查了 URL 和 Webhook key :-)。

最佳答案

使用 URL(示例中的 config.url)和显示在 https://mandrillapp.com/settings/webhooks 中的 key (config.key)针对该特定 Webhook。

除了上述响应之外,您还必须确保使用单个反斜杠对正斜杠进行转义。

// mandrillEventsParamVal - how you get that depends on your request processor chain
var paramValEscaped = mandrillEventsParamVal.replace(/\//g, '\\\/');
var input = config.url + 'mandrill_events' + paramValEscaped;
var check = crypto.createHmac('sha1', config.key).update(input, 'utf8', 'binary').digest('base64');

名为 check 的字符串是您根据 header “X-Mandrill-Signature”检查的内容。

关于javascript - 验证 Mandrill 的 X-Mandrill 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17173387/

26 4 0
文章推荐: swift - 如何从 Swift 文件中提取 API 文档?
文章推荐: css - 如何在
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com