Vérifier l'authenticité

Vérifier l'authenticité des notifications Helloasso

Vérifier l'authenticité de la notification

Afin de d'authentifier la notification, vous pouvez vous baser sur l'adresse IP de la notification.

IP ProductionIP Test
51.138.206.2004.233.135.234

Signature de notification

⚠️Uniquement pour les partenaires pour le moment ⚠️

Chacune de vos Urls de notification sont maintenant associés à une SignatureKey (string)

Exemple de réponse de configuration d'une Url de notification :

{  
    "url": "https://www.helloassotest.com/",  
    "signatureKey": "AyCM0yTeQd8In2OzdP3R2HGTrYiCA818UCFLhrD9BCnNhTriWLipxEDpsaTbdfec"  
}

Vous trouverez dans le Header des notifications envoyés par Helloasso un champ x-ha-signature

NameValue
x-ha-signaturef4ec6cb50b13bfeae856c6675ae966a18dbb30dad40cc677147785192f192b49

Une fois que vous disposez de ces informations vous pouvez désormais vérifier si la notification provient bien de Helloasso.

Concrétement vous devez générer une signature Hmac 256 avec le body de la notification et votre signatureKey.

Si la signature en résultat est la même que celle reçu dans le header c'est que la notification provient bien de Helloasso.

Exemples concrets

C#

string secretKey = "AyCM0yTeQd8In2OzdP3R2HGTrYiCA818UCFLhrD9BCnNhTriWLipxEDpsaTbdfec";
string requestBody = "{ 'eventType": 'Form', 'data': {...} }"; 
string receivedSignature = httpRequest.Headers["x-ha-signature"];

bool isAuthentic = VerifyWebhookAuthenticity(requestBody, receivedSignature, secretKey);

if (isAuthentic)
{
    Console.WriteLine("La notification webhook est authentique.");
}
else
{
    Console.WriteLine("La notification webhook est invalide.");
}

public bool VerifyWebhookAuthenticity(string requestBody, string receivedSignature, string secretKey)
{
    // Calculer la signature HMAC-SHA256 du corps du message avec la clé secrète
    string computedSignature = WebhookValidator.ComputeHMACSHA256(requestBody, secretKey);

    // Comparer la signature calculée avec celle reçue
    return computedSignature.Equals(receivedSignature, StringComparison.OrdinalIgnoreCase);
}

PHP

<?php

// Clé secrète partagée
$secretKey = "AyCM0yTeQd8In2OzdP3R2HGTrYiCA818UCFLhrD9BCnNhTriWLipxEDpsaTbdfec";

// Contenu brut du corps de la requête
$requestBody = "{ 'eventType': 'Form', 'data': {...} }";

// Récupération de tous les en-têtes HTTP
$headers = getallheaders();

// Signature reçue dans les en-têtes de la requête
$receivedSignature = isset($headers['x-ha-signature']) ? $headers['x-ha-signature'] : null;

// Calculer la signature HMAC SHA-256
function computeHMACSHA256($data, $secretKey) {
    return hash_hmac('sha256', $data, $secretKey);
}

// Vérifier l'authenticité de la notification webhook
function verifyWebhookAuthenticity($requestBody, $receivedSignature, $secretKey) {
    $computedSignature = computeHMACSHA256($requestBody, $secretKey);
    return hash_equals($computedSignature, $receivedSignature);
}

// Effectuer la vérification
if (verifyWebhookAuthenticity($requestBody, $receivedSignature, $secretKey)) {
    echo "La notification webhook est authentique.";
} else {
    echo "La notification webhook est invalide.";
}

?>


What’s Next

Voir les exemples de notification