Построить алгоритм хеширования hma c sha256 в node.js - PullRequest
0 голосов
/ 07 августа 2020

Я использую Bold Commerce Webhooks , чтобы подписаться на события подписки в моем магазине. Они предоставляют документацию о том, как их подписи запросов генерируются в PHP:

$now = time(); // current unix timestamp
$json = json_encode($payload, JSON_FORCE_OBJECT);
$signature = hash_hmac('sha256', $now.'.'.$json, $signingKey);

Я пытаюсь воссоздать ha sh на моей стороне в node.js. Из своего исследования я выяснил следующее, которое, как мне кажется, довольно близко, но еще не совпадает:

const hash = request.header("X-Bold-Signature")!;

const SECRET = "my-secret-api-key";
const body = request.body;
const time = request.header("timestamp")!;

const mySignature = crypto.createHmac('sha256', SECRET).update(time + '.' + body).digest("hex");

if (mySignature !== request.header("X-Bold-Signature")!) {
    //...
}

Я также пробовал использовать JSON.stringify(body), который меняет ха sh, но все равно не совпадает.

1 Ответ

0 голосов
/ 03 сентября 2020

Соответствует этому коду.

const hash = crypto
  .createHmac('sha256', secretKey)
  .update(JSON.stringify((body))
  .digest('base64');

Обратите внимание, что, в отличие от shopify, не используйте rawbody.

...