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 Production | IP Test |
---|---|
51.138.206.200 | 4.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
Name | Value |
---|---|
x-ha-signature | f4ec6cb50b13bfeae856c6675ae966a18dbb30dad40cc677147785192f192b49 |
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.";
}
?>
Updated 23 days ago