Sécurisation des envois
Les requêtes d’envoi de messages aux points de terminaisons disposent d’un en-tête HTTP dont la valeur représente une signature numérique offrant la possibilité (facultative mais recommandée) de vérifier l’authenticité du message et de son expéditeur (en l’occurrence Peopulse).
Clé secrète par endpoint
Comme mentionné dans la section décrivant la création d’un point de terminaison, au moment de la création de celui-ci, une clé secrète est présentée. Cette clé doit alors être notée et conservée par le SI client, car elle est unique au point de terminaison et ne sera plus affichée. Cette clé sera utilisée à chaque envoi de message pour construire la signature de l’en-tête HTTP de signature. Elle doit donc de ce fait être partagée par Peopulse et le client comme clé cryptographique symétrique de vérification.
En-tête HTTP de vérification
Un en-tête pp-svc-webhooks-signature inclus dans chaque évènement contient un horodatage (timestamp Unix) et une signature (chaîne alphanumérique en hexadécimale).
L’horodatage est préfixé par t= et la signature par sig= puis ces 2 paramètres sont concaténés et séparés par une virgule ‘,’.
Voici un exemple d’un tel en-tête :
pp-svc-webhooks-signature: "t=1702375140,sig=8b512291f476e9f2a3e5652ee8328fa9a59b3f71bf12ddc439615e58db708f6b"
Algorithme de signature
La logique de création de la chaîne de signature est la suivante :
timestamp=1702375140
message_body='{"event_type":"LAMBDA_TYPE", "event_data": {...}}'
signing_string='<timestamp>.<message_body>'
digest=HMAC-SHA256(<signing_string>, <secret_endpoint_key>)
hexadecimal_digest=HEX(<digest>)
Où secret_endpoint_key
est la clé secrète fournie à la création du endpoint, et message_body
la chaîne de caractère au format JSON du contenu du message.
La valeur de l’en-tête HTTP la requête, mentionné dans la section précédente, est donc construite comme suit :
pp-svc-webhooks-signature: "t=<timestamp>,sig=<hexadecimal_digest>"