验证Trello webhook

问题描述 投票:0回答:1

我无法在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改变了散列算法,但我不想排除我的专长(hairbrained)错误)。 FWIW我确实验证了回调网址是Trello的API所说的应该是什么。

php node.js
1个回答
0
投票

所以我通过返回HMAC哈希的二进制文件并使用OAuth1秘密来实现它。

function h( $s ) {
    return base64_encode( hash_hmac( 'sha1', $s, $secret, true ) );
}

$incomingHash = $_SERVER['HTTP_X_TRELLO_WEBHOOK'];
$h2 = h( h( $post . $callbackURL ) );
$h1 = h( $incomingHash );

您可以通过以下方式查找使用的回调URL:https://developers.trello.com/v1.0/reference#tokenstokenwebhooks

© www.soinside.com 2019 - 2024. All rights reserved.