我正在開發一個Node.js應用程序,我正在努力驗證Mandrill Webhook請求。驗證Mandrill的X-Mandrill-Signature
如這裏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數據來自url編碼,如:
mandrill_events=%5B%7B%22event%22%3A%22inbound ...
Urldecoded:
mandrill_events=[{"event":"inbound ...
山魈醫生說,該分隔符不應該被包括在內,所以這是我使用的字符串(無=
):
mandrill_events[{"event":"inbound ...
有關於此的任何想法?
PS:我仔細檢查了URL和Webhook Key :-)。
這裏要明確,mandrillEventsParamVal應該引用URL的查詢部分,是否正確? '?'之後的任何內容在一個網址。 – Brant