Zum Hauptinhalt springen

Webhook-Sicherheit

Authentifizieren Sie Optacy-Webhooks mit HMAC-SHA-256-Signaturen und Ihrem privaten API-Schlüssel.

Jede Webhook-Anfrage muss validiert werden, damit Sie nur Daten von Optacy akzeptieren. Das Signaturobjekt jeder Anfrage enthält drei Felder:

  • ein zufälliges Token
  • einen Zeitstempel (Millisekunden seit dem 1. Januar 1970)
  • eine Signatur: HMAC SHA-256 aus dem Zeitstempel, verkettet mit dem zufälligen Token, signiert mit Ihrem privaten API-Schlüssel aus dem Tab Webhooks im Dashboard

So authentifizieren Sie

  1. Verketten Sie timestamp und token ohne Leerzeichen zu einer einzigen Zeichenfolge.
  2. Berechnen Sie den HMAC SHA-256 dieser Zeichenfolge mit Ihrem privaten API-Schlüssel.
  3. Vergleichen Sie den Hex-Digest mit dem Feld signature in der Anfrage.
  4. Stimmen beide überein, akzeptieren Sie die Anfrage; andernfalls lehnen Sie sie ab.

Speichern Sie Ihren privaten API-Schlüssel sicher und greifen Sie sicher darauf zu, in der Regel über eine Umgebungsvariable.

Beispiel für 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
  # die Anfrage wird akzeptiert
else
  raise "Optacy webhook did not authenticate"
end

Schutz vor Replay-Angriffen

Sie können Zeitstempel ablehnen, die älter als einige Minuten sind, um Replay-Angriffe abzuwehren. Über HTTPS ist das Replay-Risiko bereits gering; diese Prüfung ist optional und im obigen Beispiel nicht enthalten.