Secure Webhook for Azure Function via API Key

 

Використовуйте веб-хуки для безсерверної розробки, частина 4 Безпечний веб-хук для функції Azure за допомогою ключа API

Веб-хуки чудово спрацьовують дії під час певних подій сервера, але вони за своєю суттю не є безпечними. Ключ API повинен надалі забезпечувати доступ до нашої функції Azure, створеної в цьому посібнику.

Компанія про тему

У налаштуваннях веб-хуків GitHub ми можемо зберігати власний секрет для нашої URL-адреси корисного навантаження.У налаштуваннях веб-хуків GitHub ми можемо зберігати власний секрет для нашої URL-адреси корисного навантаження.

(Зображення: Drilling / GitHub)

Наша функція Azure прослуховує будь-яке корисне навантаження, надіслане з налаштованої кінцевої точки, як тільки вона налаштована на отримання корисних навантажень. Однак з міркувань безпеки ви часто хочете прийняти лише вимоги GitHub, наприклад, і нікуди більше.

Для такого починання можливі різні можливості. Наприклад, ви можете дозволити запити лише з IP-адрес GitHub. Більш професійним і в той же час простішим у налаштуванні є налаштування секретного маркера і дозволу запиту лише за допомогою дійсного маркера.

Для конфігурації веб-хука це полеДля конфігурації веб-хука поле “Секрет” доступне в GitHub

(Зображення: Drilling / GitHub)

Налаштування секрету веб-хука може гарантувати, що MAIL, що надсилається на URL-адресу корисного навантаження, надходить від GitHub. Для цього під час налаштування веб-хука доступне раніше не обговорюване поле “Секрет”. Якщо ви встановите такий секрет, запит POST на веб-хук отримає заголовок підпису x-hub.

Щоб підготуватися до секретного використання в нашій функції Azure, ми знову переходимо до нашої функції на порталі Azure і редагуємо наш індекс файлу JavaScript again.js і додаємо на початку файлу посилання на бібліотеку crypto-js за допомогою оператор modules.exports:

const Crypto = require('crypto');

ВУ розділі “Функціональний ключ” під Azure ми можемо скопіювати існуюче значення ключа за замовчуванням у буфер обміну.

(Зображення: Drilling / Microsoft)

Потім ми переходимо до розділу «Функціональні клавіші» в меню « Розробник » ліворуч і показуємо значення за замовчуванням клавіші «за замовчуванням». Клацніть на “Показати значення”.

Тепер ми можемо скопіювати існуюче значення ключа за замовчуванням в буфер обміну, а потім повернутися до редактора функцій і додати…

const hmac = Crypto.createHmac("sha1", "<default key>");
const signature = hmac.update(JSON.stringify(req.body)).digest('hex');

…, де “<ключ за замовчуванням & gt;” повинен бути відповідно замінений.

Однак, щоб ключ відповідав формату підпису x-hub у заголовку запиту, нам все одно потрібно вставити “sha1 =” на початку ключа:

const shaSignature="sha1=${signature}";

Потім нам потрібно додати код для отримання підпису GitHub із заголовка запиту:

const gitHubSignature = req.headers['x-hub-signature'];

Потім обробка запиту виглядає так:

Оновлений тригер http з ключами API.Оновлений тригер http з ключами API.

(Зображення: Drilling / Microsoft)

if (! shaSignature.local compare (підпис GitHub)) {

// Існуючий код
if (req.body.pages [0] .title) {

…}
}
ще {

context.re = {

статус: 401,
тіло: “Підписи не збігаються”
};
}

Секрет, доданий у конфігурації Webhook.Секрет, доданий у конфігурації Webhook.

(Зображення: Drilling / GitHub)

Тепер нам залишається лише ввести секрет у наших налаштуваннях веб-хука на GitHub.

blankЗаголовок “X-Hub-Signature”.

(Зображення: Drilling / Microsoft)

Якщо ми знову натиснемо «Оновити веб-хук» після створення нової сторінки вікі або редагування існуючої, у заголовку запиту відобразиться «Підпис X-Hub» (team work).

Результат аналізу веб-хука.Результат аналізу веб-хука.

(Зображення: Drilling / Microsoft)

Відповідь, звичайно, залишається незмінною.

(ID: 47138793)

Ready to see us in action:

More To Explore

IWanta.tech
Logo
Enable registration in settings - general
Have any project in mind?

Contact us:

small_c_popup.png