Lorsque vous configurez une URL de webhook dans votre Outscraper notre système enverra automatiquement un POST avec les résultats de l'analyse à cette URL chaque fois qu'une tâche/requête est terminée.
Pour des raisons de sécurité, chaque charge utile du webhook est signée à l'aide de l'option votre clé API Outscraper. Cela vous permet de vérifier que le webhook provient bien de Outscraper et qu'il n'a pas été modifié.
Étape 1. En-tête de signature
Chaque demande de webhook comprend un en-tête supplémentaire :
X-Hub-Signature-256: sha256=
-
<signature>est un condensé HMAC-SHA256 de la charge utile JSON brute. -
Il est généré à l'aide de votre clé API Outscraper.
-
Pour vérifier l'authenticité, vous devez calculer le même condensé localement et le comparer à l'en-tête.
Étape 2. Exemple de demande de Webhook
Voici à quoi ressemble une vraie demande de 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
}
]
}
Étape 3. Vérification
Pour vérifier une demande de webhook, vous devez :
-
Lire le charge utile JSON brute (et non l'objet analysé).
-
Calculer un condensé HMAC-SHA256 de cette charge utile à l'aide de votre Clé API.
-
Le faire précéder de
"sha256="et la comparer à la valeur de laX-Hub-Signature-256l'en-tête. -
Rejeter la demande si les signatures ne correspondent pas.
Exemple 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
Exemple 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"));
Exemple PHP
Étape 4. Que faire en cas d'échec de la vérification ?
Si la signature calculée ne correspond pas à l'en-tête :
Rejeter la demande (
401 Unauthorized).Enregistrer la tentative pour le débogage/l'audit.
Ne pas traiter la charge utile.
Étape 5. Test
Vous pouvez tester votre logique de vérification en déclenchant un webhook depuis Outscraper.
La signature sera toujours validée correctement tant que vous utiliserez votre Clé API.
Résumé
Tous les webhooks de Outscraper sont signés à l'aide de votre clé API.
Vérifier les demandes par informatique :
sha256(HMAC(api_key, raw_payload))
Comparer le condensé calculé avec le
X-Hub-Signature-256l'en-tête.Ne traitez que les demandes vérifiées afin de préserver la sécurité de votre système.
Références
La méthode utilisée par Outscraper est la même que celle utilisée par les principales plateformes pour vérifier l'authenticité des webhooks :
GitHub Webhooks : Sécuriser vos webhooks - GitHub utilise le même
X-Hub-Signature-256avec HMAC-SHA256.Twilio : Validation des requêtes - Twilio valide toutes les demandes de webhook via des signatures HMAC.
Slack : Vérification des demandes provenant de Slack - Slack signe les demandes avec un secret partagé et exige une validation HMAC.
Ces exemples montrent que la vérification des signatures des webhooks avec HMAC-SHA256 est le moyen standard de confirmer l'authenticité et d'empêcher la falsification.