Sécurité des webhooks
Authentifiez les webhooks Optacy avec des signatures HMAC SHA-256 à l’aide de votre clé API privée.
Chaque requête webhook doit être validée afin de n’accepter que les données provenant d’Optacy. L’objet signature de chaque requête comprend trois champs :
- un jeton aléatoire
- un horodatage (en millisecondes depuis le 1er janvier 1970)
- une signature : HMAC SHA-256 de l’horodatage concaténé au jeton aléatoire, avec comme clé votre clé API privée, disponible dans l’onglet Webhooks du tableau de bord
Comment authentifier
- Concaténez
timestampettokenen une seule chaîne, sans espaces. - Calculez le HMAC SHA-256 de cette chaîne avec votre clé API privée.
- Comparez le condensé hexadécimal au champ
signaturede la requête. - S’ils correspondent, acceptez la requête ; sinon, rejetez-la.
Stockez votre clé API privée et accédez-y de manière sécurisée, généralement via une variable d’environnement.
Exemple Ruby on Rails
token = params["signature"]["random_token"]
timestamp = params["signature"]["timestamp"]
signature = params["signature"]["signature"]
signed_test_data = OpenSSL::HMAC.hexdigest(
"SHA256",
ENV["OPTACY_WEBHOOK_PRIVATE_API_TOKEN"],
"#{timestamp}#{token}"
)
if signed_test_data == signature
# la requête est acceptée
else
raise "Optacy webhook did not authenticate"
end
Protection contre le rejeu
Vous pouvez rejeter les horodatages datant de plus de quelques minutes pour limiter les attaques par rejeu. Le risque de rejeu est déjà faible via HTTPS ; cette vérification est facultative et ne figure pas dans l’exemple ci-dessus.