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#
using System;
using System.Security.Cryptography;
using System.Text;
public class WebhookHandler
{
private string ComputeHMACSHA256(string message, string secretKey)
{
// Convertir la clé secrète et le message en tableau de bytes
byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
// Créer un objet HMAC-SHA256 avec la clé secrète
using (var hmac = new HMACSHA256(keyBytes))
{
// Calculer le hash du message
byte[] hashBytes = hmac.ComputeHash(messageBytes);
// Convertir le hash en chaîne hexadécimale
return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
}
}
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 = ComputeHMACSHA256(requestBody, secretKey);
// Comparer la signature calculée avec celle reçue
return computedSignature.Equals(receivedSignature, StringComparison.OrdinalIgnoreCase);
}
public void HandleWebhook()
{
string secretKey = "AyCM0yTeQd8In2OzdP3R2HGTrYiCA818UCFLhrD9BCnNhTriWLipxEDpsaTbdfec";
string requestBody = "{ 'eventType': 'Form', 'data': {...} }";
string receivedSignature = httpRequest.Headers["x-ha-signature"]; // Remplacez par l'objet réel
bool isAuthentic = VerifyWebhookAuthenticity(requestBody, receivedSignature, secretKey);
if (isAuthentic)
{
Console.WriteLine("La notification webhook est authentique.");
}
else
{
Console.WriteLine("La notification webhook est invalide.");
}
}
}
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 11 days ago