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
- Verketten Sie
timestampundtokenohne Leerzeichen zu einer einzigen Zeichenfolge. - Berechnen Sie den HMAC SHA-256 dieser Zeichenfolge mit Ihrem privaten API-Schlüssel.
- Vergleichen Sie den Hex-Digest mit dem Feld
signaturein der Anfrage. - 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.