Signer et vérifier un webhook
Un faux événement de paiement réussi ou une mise à jour de commande forgée atteint facilement un service qui croit tout ce qu'il reçoit : signez vos notifications sortantes avec un secret partagé et vérifiez les entrantes, déclarées valides, altérées ou expirées. Gratuit dans votre navigateur.
- Gratuit
- Fonctionne dans votre navigateur
- Sans inscription
- Vos données restent sur votre appareil
Lancer gratuitement
Tout se passe dans votre navigateur : gratuit, sans envoi de vos données.
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.
Pourquoi signer vos notifications
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
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. 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
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à.
Questions fréquentes
Quels algorithmes HMAC sont pris en charge ?
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 ?
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.
Faut-il un compte ?
L'outil ci-dessus est gratuit dans votre navigateur. Pas d'abonnement, pas de jetons, et une tâche en échec n'est jamais facturée.
Outils associés
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 '{"payload":{"event":"ping"},"secret":"whsec_123"}'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({
"payload": {
"event": "ping"
},
"secret": "whsec_123"
})
});
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={
"payload": {
"event": "ping"
},
"secret": "whsec_123"
},
)
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" => '{"payload":{"event":"ping"},"secret":"whsec_123"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"payload":{"event":"ping"},"secret":"whsec_123"}`)
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
{
"payload": {
"event": "ping"
},
"secret": "whsec_123"
}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. |
Notes techniques
Cet outil calcule la signature HMAC d’une charge utile de webhook, ou vérifie celle d’un événement reçu.
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.
Le secret reste chez vous
Un secret de webhook est une clé sensible : il ne devrait jamais transiter par un service tiers.
Automatiser la vérification
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.
Cas d'intégration
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.
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.