【发布时间】:2021-06-26 02:07:19
【问题描述】:
我在验证 PHP 或 Node.js 中的 Trello webhook 时遇到问题。我直接从这里复制了 Node.js 版本:https://developers.trello.com/page/webhooks
var crypto = require('crypto');
function verifyTrelloWebhookRequest(request, secret, callbackURL) {
var base64Digest = function (s) {
return crypto.createHmac('sha1', secret).update(s).digest('base64');
}
var content = JSON.stringify(request.body) + callbackURL;
var doubleHash = base64Digest(base64Digest(content));
var headerHash = base64Digest(request.headers['x-trello-webhook']);
return doubleHash == headerHash;
}
但是,在 Node.js 版本中,我确实用值替换了 request、secret 和 callbackURL。我得到的 PHP 版本是:
function h( $s ) {
return base64_encode( hash_hmac( 'sha1', $s, $secret ) );
}
$incomingHash = $_SERVER['HTTP_X_TRELLO_WEBHOOK'];
$h2 = h( h( $post . $callbackURL ) );
$h1 = h( $incomingHash );
此时我认为我的“秘密”错了,尽管我已经尝试过令牌、oauth 秘密和 api 密钥或 Trello 更改了哈希算法,但我不想排除我的专业(头脑发热的错误)。 FWIW 我确实验证了回调 URL 与 Trello 的 API 所说的完全一致。
【问题讨论】: