Articles sur : Organisation

Comment vérifier un appel à un webhook?

Introduction


Cet article explique comment vérifier les appels Webhook dans votre application. Cette vérification permet de garantir que l'appel Webhook provient bien de la source attendue (Smino API), en utilisant un hachage SHA512 généré à partir d'une clé secrète (Secret), d'un horodatage et d'un Event-ID.


Conditions préalables


Un Webhook a été configuré et une clé secrète (Secret) a été définie.
L'appel Webhook contient un en-tête (x-hook-signature) qui contient le hachage envoyé par le serveur.


Fonctionnement


La vérification d'un appel Webhook se fait en trois étapes principales :


  • Extraction des informations nécessaires: Le serveur envoie un hachage dans l'en-tête de l'appel Webhook, que nous interceptons à l'aide du nom x-hook-signature.


  • Création du hachage attendu: Nous générons un hachage en utilisant le secret, l'horodatage et l'ID de l'événement présents dans le Webhook.


  • Comparaison des hashs: Le hachage reçu est comparé à celui que nous avons généré. Si les deux hachages correspondent, le Webhook peut être considéré comme vérifié.


Exemple en C#

Voici un exemple de code en C# pour la vérification d'un Webhook :


using System.Globalization;
using System.Security.Cryptography;
using System.Text;

var response = new HttpResponseMessage();
const string signatureHeader = "x-hook-signature";
response.Headers.Add(signatureHeader, "<serverHash>"); 

const string secret = "<your secret>";
var payload = new { EventId = Guid.NewGuid(), TimeStamp = DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)};

var expectedHash = CreateHash($"{payload.EventId:N}.{payload.TimeStamp}.{secret}");

var responseHash = response.Headers.GetValues(signatureHeader).Single();

VerifyHash(responseHash, expectedHash);

static string CreateHash(string signature)
{
    var sha512 = SHA512.Create();
    var bytes = Encoding.UTF8.GetBytes(signature);
    var hash = sha512.ComputeHash(bytes);
    return string.Concat(hash.Select(hashByte => hashByte.ToString("x2"))).ToUpper(); 
}

static bool VerifyHash(string responseHash, string expectedHash)
{
    return responseHash == expectedHash;
}


Remarques importantes: l'horodatage ne doit être récupéré / analysé que sous forme de chaîne de caractères, car son analyse en objet DateTime ou similaire peut être source d'erreurs liées au formatage. Assure-toi que ta clé secrète est conservée en lieu sûr et qu'elle n'est pas accessible au public. L'en-tête x-hook-signature est essentiel, car il permet la vérification. Cette procédure te permet de t'assurer que les appels de webhook dans ton application sont authentiques et proviennent uniquement de sources autorisées.

Mis à jour le : 29/09/2026

Cet article a-t-il répondu à vos questions ?

Partagez vos commentaires

Annuler

Merci !