Signer et vérifier un webhook
Cet outil calcule la signature HMAC d’une charge utile de webhook, ou vérifie celle d’un événement reçu. Vous fournissez le corps, le secret partagé et l’algorithme — SHA-256 le plus souvent — et vous obtenez la signature à comparer à l’en-tête. Le secret ne quitte jamais votre navigateur.
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
Pourquoi signer un webhook
Un webhook arrive par une URL publique : n’importe qui connaissant l’adresse pourrait tenter d’y envoyer un faux événement. La signature HMAC résout ce problème. L’émetteur calcule une empreinte du corps avec un secret partagé et la place dans un en-tête ; le récepteur recalcule la même empreinte et compare. Si les deux coïncident, l’événement est authentique et n’a pas été altéré en chemin.
Signer ou vérifier
L’outil fonctionne dans les deux sens. Côté réception, vous collez le corps brut reçu, le secret et la signature de l’en-tête pour confirmer qu’elle correspond. Côté émission, vous fournissez le corps et le secret pour obtenir la signature à joindre à votre envoi. Le même calcul, la même rigueur, selon que vous vérifiez un événement entrant ou que vous en préparez un sortant.
Le secret reste chez vous
Un secret de webhook est une clé sensible : il ne devrait jamais transiter par un service tiers. Ici, le calcul s’exécute entièrement dans votre navigateur ; le secret et le corps de l’événement ne sont ni transmis, ni enregistrés, ni journalisés sur nos serveurs. Vous déboguez une signature en toute sécurité, sans exposer la clé qui protège toute votre intégration.
Automatiser la vérification
Sur la page, le débogage manuel est gratuit et illimité : idéal pour comprendre pourquoi une signature ne correspond pas. Pour vérifier automatiquement chaque événement entrant, l’API applique le contrôle au fil de l’eau, facturée $0.002 par requête en dollars US, et d’autres canaux suivront. La logique de sécurité reste la vôtre ; l’outil ne fait qu’exécuter le calcul, sans jamais voir votre secret hors de votre appareil.
Cas d’usage
Vérifier un événement entrant
Thomas veut s’assurer qu’un webhook provient bien de son prestataire. Il colle le corps reçu, le secret et l’en-tête de signature : les empreintes coïncident, l’événement est authentique.
Déboguer une signature qui ne correspond pas
Une intégration rejette tous les événements. Nadia compare, côté émetteur et côté récepteur, et découvre que le corps était re-sérialisé avant le calcul : la source du décalage était là.
Signer un webhook sortant
Avant d’envoyer un événement à un partenaire, l’équipe de Studio Lumen SAS calcule la signature à joindre, pour que le destinataire puisse à son tour l’authentifier.
Questions fréquentes
Quels algorithmes HMAC sont pris en charge ?
Les usuels, dont HMAC SHA-256, le plus répandu pour les webhooks, ainsi que SHA-1 et SHA-512. Choisissez celui qu’attend votre intégration ; la plupart des services documentent SHA-256.
Mon secret est-il envoyé sur vos serveurs ?
Non, jamais. Le calcul se fait entièrement dans votre navigateur. Le secret et le corps de l’événement restent sur votre appareil ; rien n’est transmis ni journalisé. C’est indispensable pour une clé de cette sensibilité.
Pourquoi ma signature ne correspond-elle pas ?
Le plus souvent, le corps signé n’est pas exactement celui reçu : un espace, un re-encodage ou un JSON re-sérialisé suffit à changer l’empreinte. Signez et vérifiez toujours le corps brut, octet pour octet, tel qu’il a été transmis.
Comment comparer à l’en-tête reçu ?
Collez la valeur de l’en-tête de signature ; l’outil indique si elle correspond à l’empreinte recalculée. Certains services préfixent la signature ou l’encodent en hexadécimal ou en base64 : tenez-en compte selon leur documentation.
Est-ce gratuit ?
Dans le navigateur, oui : sans limite ni inscription. Pour vérifier automatiquement les événements via l’API, le tarif est de $0.002 par requête, en dollars US, affiché et sans abonnement.
Faut-il un compte ?
L'outil ci-dessus est gratuit dans votre navigateur. L'API est payante — chaque appel est débité de votre solde prépayé ForHosting KIT : rechargez à partir de $10.00 (il n'expire jamais), payez le prix publié de chaque requête, et un appel sans solde renvoie HTTP 402. Pas d'abonnement, pas de jetons, et une tâche en échec n'est jamais facturée.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/webhook-sign \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"input":"…"}'const res = await fetch("https://api.kit.forhosting.com/dev/webhook-sign", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"input": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/webhook-sign",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"input": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/webhook-sign", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"input":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"input":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/webhook-sign", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"input": "…"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.webhook_sign",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |