Aller au contenu principal

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

  1. Concaténez timestamp et token en une seule chaîne, sans espaces.
  2. Calculez le HMAC SHA-256 de cette chaîne avec votre clé API privée.
  3. Comparez le condensé hexadécimal au champ signature de la requête.
  4. 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.