validationMandrill的X-Mandrill-Signature
我正在开发一个Node.js应用程序,我正在努力validationMandrill 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 ...
Urldecoded:
mandrill_events=[{"event":"inbound ...
Mandrill文档说,不应该包含分隔符,所以这是我使用的string(不=
):
mandrill_events[{"event":"inbound ...
任何想法呢?
PS:我仔细检查了URL和Webhook Key :-)。
使用示例中的URL( config.url
)和https://mandrillapp.com/settings/webhooks中显示的特定Webhook的密钥( config.key
)。
除了上面的回应之外,你必须确保正斜杠是用一个反斜杠转义的。
// 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
的string是你检查标题'X-Mandrill-Signature'。
问题来自您的input数据格式。 你必须连接键/值对,例如:
var data = URL; for(var key in POST_DATA)data + = key + POST_DATA [key];
现在,你可以检查base64(sha1(data,mkey))是否等于签名。
- 在nodejs代码中使用window.crypto
- Microsoft Azure密钥保pipe库可以进行对称encryption吗?
- 在Javascript中可以实现端到端的encryption吗?
- 使用node.js通过HTTP将文件encryption为string
- Node.js让我们在Chrome中encryptionfile upload错误
- Node.js / javascript在PHP中像mcrypt_ecb一样encryptionAES-128
- 这个C#encryption代码在NodeJS中看起来像什么?
- 在Unity中encryption,在Node.js中解密
- RSAencryption之间的c + +和node.js