Проверка подписи веб-перехватчиков Kentico Cloud в Express.js

Как проверить подпись веб-книги с помощью express.js?

В документах есть раздел про подписи уведомлений но я не знаю как его совместить с Express.js

This question is a migrated from official Kentico Cloud Forum, that would be deleted.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
96
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В справочнике по API есть образец описывает проверку веб-перехватчика на разных языках, включая node.js.

Если вы хотите использовать express.js, вы можете начать с этого кода шаблона:

const express = require('express');
const crypto = require('crypto');

// Create a new instance of express
const app = express();

// Set up a raw bodyparser to read the webhook post
const bodyParserRaw = require('body-parser').raw({
    type: '*/*',
});

function webhookValidator (req, res, next) {
    // get the header signature from the webhook request
    const givenSignature = req.headers['x-kc-signature'];

    // throw error if it's missing
    if (!givenSignature) {
        console.info('Missing signature');
        return res.status(409).json({
            error: 'Missing signature'
        });
    }

    // create HMAC from the raw request body
    let hmac = crypto.createHmac('sha256', [your-webhook-secret-key]);
    hmac.write(req.body);
    hmac.end();

    // get a base64 hash from HMAC
    let hash = hmac.read().toString('base64');

    // check validity with timingSafeEqual
    let webhookValid = false;
    try {
        webhookValid = crypto.timingSafeEqual(Buffer.from(givenSignature, 'base64'), Buffer.from(hash, 'base64'));
    } catch (e) {
        webhookValid = false
    }

    // return validity
    if (webhookValid) {
        return next();
    } else {
        console.info('Invalid signature');
        return res.status(409).json({
            error: 'Invalid signature'
        });
    }
}

// create a route and pass through the bodyparser and validator
app.post('/webhook', bodyParserRaw, webhookValidator, ( req, res, next ) => {
    // If execution gets here, the HMAC is valid
    console.info('webhook is valid');
});

РЕДАКТИРОВАТЬ

Вы можете использовать вспомогательную библиотеку веб-перехватчиков Kontent для быстрой проверки уведомлений веб-перехватчиков и их подписей. Библиотека доступна в виде пакета @kentico/kontent-webhook-helper npm и помогает избежать типичных проблем при вычислении хэша.

Другие вопросы по теме