Коли ви налаштовуєте URL-адресу веб-хука у вашому Outscraper налаштувань інтеграції, наша система автоматично відправить POST з вилученими результатами на цю URL-адресу щоразу, коли завдання/запит буде завершено.
Для безпеки кожне корисне навантаження веб-хука підписується за допомогою ваш ключ API Outscraper. Це дозволить вам переконатися, що веб-хук дійсно походить від Outscraper і не був змінений.
Крок 1. Заголовок підпису
Кожен запит webhook містить додатковий заголовок:
X-Hub-Signature-256: sha256=
-
<signature>це HMAC-SHA256-дайджест необробленого JSON-даних. -
Він генерується за допомогою ваш ключ API Outscraper.
-
Щоб перевірити автентичність, потрібно обчислити той самий дайджест локально і порівняти його із заголовком.
Крок 2. Приклад запиту Webhook
Ось як виглядає справжній запит до веб-хука:
POST /webhooks HTTP/1.1
Host: your-domain.com
Content-Type: application/json
X-Hub-Signature-256: sha256=7b6b9d07b1c0d7ff3b4b3fcecbf9c08a5f6c2a248ef12c7a37a7269d3a5b1b93
{
"id": "your-request-id",
"user_id": "your-user-id",
"status": "SUCCESS",
"api_task": true,
"results_location": "https://api.outscraper.cloud/requests/your-request-id",
"quota_usage": [
{
"product_name": "Google Maps Data",
"quantity": 1
}
]
}
Крок 3. Перевірка
Щоб підтвердити запит на веб-хук, ви повинні:
-
Прочитайте сирий JSON-вантаж (а не об'єкт синтаксичного аналізу).
-
Обчисліть дайджест HMAC-SHA256 цього корисного навантаження, використовуючи ваш Ключ API.
-
Приготуйте його за допомогою
"sha256="і порівняйте зі значенням уX-Hub-Signature-256заголовок. -
Відхилити запит, якщо підписи не збігаються.
Приклад на Python
import hmac
import hashlib
import json
from flask import Flask, request, abort
app = Flask(__name__)
API_KEY = "your_api_key_here" # your Outscraper API key
def generate_hmac_sha256(secret: str, data: str) -> str:
return hmac.new(secret.encode("utf-8"), data.encode("utf-8"), hashlib.sha256).hexdigest()
@app.route("/webhooks", methods=["POST"])
def webhook():
# Raw JSON payload as text
payload = request.get_data(as_text=True)
# Signature header from Outscraper
signature_header = request.headers.get("X-Hub-Signature-256", "")
# Compute expected signature
expected_signature = "sha256=" + generate_hmac_sha256(API_KEY, payload)
# Secure comparison
if not hmac.compare_digest(signature_header, expected_signature):
abort(401, "Invalid signature")
data = json.loads(payload)
print("Verified payload:", data)
return "ok", 200
Приклад Node.js
const crypto = require("crypto");
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyParser.json({ verify: (req, res, buf) => { req.rawBody = buf.toString() } }));
const API_KEY = "your_api_key_here"; // your Outscraper API key
function generateHmacSha256(secret, data) {
return crypto.createHmac("sha256", secret).update(data, "utf8").digest("hex");
}
app.post("/webhooks", (req, res) => {
const signature = req.headers["x-hub-signature-256"];
const expected = "sha256=" + generateHmacSha256(API_KEY, req.rawBody);
if (!crypto.timingSafeEqual(Buffer.from(signature), Buffer.from(expected))) {
return res.status(401).send("Invalid signature");
}
console.log("Verified payload:", req.body);
res.send("ok");
});
app.listen(3000, () => console.log("Webhook listener running on port 3000"));
Приклад PHP
Крок 4. Що робити, якщо верифікація не пройшла
Якщо обчислений підпис не збігається із заголовком:
Відхилити запит (
401 Unauthorized).Зафіксуйте спробу налагодження/аудиту.
Не обробляйте корисне навантаження.
Крок 5. Тестування
Ви можете протестувати логіку перевірки, запустивши веб-хук від Outscraper.
Підпис завжди буде коректно підтверджено, якщо ви використовуєте свій обліковий запис Ключ API.
Підсумок
Всі веб-хуки Outscraper підписані за допомогою ваш ключ API.
Перевіряйте запити за допомогою обчислень:
sha256(HMAC(api_key, raw_payload))
Порівняйте розрахований дайджест з
X-Hub-Signature-256заголовок.Обробляйте лише перевірені запити, щоб захистити вашу систему.
Посилання
Метод, який використовує Outscraper, - це той самий підхід, якому довіряють більшість платформ для перевірки автентичності веб-хуків:
Веб-хуки GitHub: Захист ваших веб-хуків - GitHub використовує ті ж самі
X-Hub-Signature-256заголовок з HMAC-SHA256.Twilio: Перевірка запитів - Twilio перевіряє всі запити на веб-хук за допомогою HMAC-підписів.
Slack: Перевірка запитів зі Slack - Slack підписує запити зі спільним секретом і вимагає перевірки HMAC.
Ці приклади показують, що перевірка підписів веб-хуків за допомогою HMAC-SHA256 є стандартним способом підтвердження автентичності та запобігання підробці.