Podczas konfigurowania adresu URL webhooka w swoim wysięgnik ustawienia integracji – nasz system automatycznie wyśle POST wysyłać żądanie z wynikami zebranymi przez scraper na ten adres URL za każdym razem, gdy zadanie/żądanie zostanie zakończone.
Ze względów bezpieczeństwa każda treść webhooka jest podpisywana przy użyciu Twój klucz API Outscraper. Dzięki temu możesz sprawdzić, czy webhook rzeczywiście pochodzi z Outscraper i nie został zmodyfikowany.
Krok 1. Nagłówek podpisu
Każde żądanie typu webhook zawiera dodatkowy nagłówek:
X-Hub-Signature-256: sha256=
<signature>jest skrótem HMAC-SHA256 surowej treści JSON.Jest on generowany przy użyciu Twój klucz API Outscraper.
Aby zweryfikować autentyczność, należy obliczyć ten sam skrót lokalnie i porównać go z danymi zawartymi w nagłówku.
Krok 2. Przykładowe żądanie webhooka
Oto jak wygląda prawdziwe żądanie typu 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
}
]
}
Krok 3. Weryfikacja
Aby zweryfikować żądanie webhooka, należy:
Przeczytaj surowa treść JSON (nie obiekt poddany analizie).
Oblicz skrót HMAC-SHA256 tej treści przy użyciu swojego Klucz API.
Dodaj na początku
"sha256="i porównać z wartością podaną wX-Hub-Signature-256nagłówek.Odrzuć wniosek, jeśli podpisy się nie zgadzają.
Przykład w języku 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
Przykład wykorzystania 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"));
Przykład w języku PHP
Krok 4. Co zrobić, jeśli weryfikacja się nie powiedzie
Jeśli obliczony podpis nie zgadza się z nagłówkiem:
Odrzuć wniosek (
401 Unauthorized).Zarejestruj tę próbę na potrzeby debugowania/audytu.
Nie należy przetwarzać danych użytkowych.
Krok 5. Testowanie
Możesz przetestować swoją logikę weryfikacji, uruchamiając webhook z serwisu Outscraper.
Podpis będzie zawsze poprawnie weryfikowany, o ile użyjesz swojego Klucz API.
Podsumowanie
Wszystkie webhooki Outscraper są podpisywane przy użyciu Twój klucz API.
Zweryfikuj żądania poprzez obliczenia:
sha256(HMAC(api_key, raw_payload))
Porównaj obliczony skrót z
X-Hub-Signature-256nagłówek.Aby zapewnić bezpieczeństwo systemu, należy przetwarzać wyłącznie zweryfikowane żądania.
Bibliografia
Metoda Outscraper stosuje to samo podejście, z którego korzystają największe platformy w celu weryfikacji autentyczności webhooków:
Webhooki GitHub: Zabezpieczanie webhooków – GitHub korzysta z tego samego
X-Hub-Signature-256nagłówek z HMAC-SHA256.Twilio: Sprawdzanie poprawności żądań – Twilio weryfikuje wszystkie żądania webhooków za pomocą podpisów HMAC.
Slack: Weryfikacja żądań pochodzących ze Slacka – Slack podpisuje żądania przy użyciu wspólnego klucza tajnego i wymaga weryfikacji HMAC.
Przykłady te pokazują, że weryfikacja podpisów webhooków za pomocą algorytmu HMAC-SHA256 stanowi standardowy sposób potwierdzania autentyczności i zapobiegania manipulacjom.