Webhooks
Webhooks zur einfachen Integration externer Anwendungen in die PureLife Cloud.
Die PureLife Cloud verwendet Webhooks, um deine Anwendung zu benachrichtigen, wenn ein Sensor ein neues Ereignis meldet. Hierzu wird ein HTTP-POST-Request an eine hinterlegte URL gesendet.
Authentifizierung
Die PureLife Cloud sendet mit jedem Request einen für jeden Webhook automatisch generierten Token. Über diesen kann verifiziert werden, dass das Request von der Cloud und nicht von einer anderen Partei gesendet wurde.
Der Token wird durch einen kryptografischen Zufallsgenerator erzeugt und ist 128-Bit lang. Um den Token einfach zu transferieren, ist er als mit z-base-32
kodiert. Man erhält den Token auf der Übersichtsseite für Webhooks.
Die Cloud unterstützt verschieden Methoden zur Authentifizierung mittels des Tokens:
- Bearer-Authentifizierung: Sendet den Token als
Authorization: Bearer <token>
-Header. - X-Api-Key (IETF RFC): Sendet den Token als
X-Api-Key: <token>
-Header. Der Aufbau des Header-Namen ist dabei an Standard-HTTP-Header angelehnt. - X-API-KEY (Case sensitive): Sendet den Token als
X-API-KEY: <token>
-Header. Kann verwendet werden, falls Ihre Anwendung zwischen Groß- und Kleinschreibung unterscheidet. - HTTP/Basic: Verwendet HTTP-Basis-Authentifizierung. Der Benutzername ist dabei immer
purelife-cloud
und das Passwort der Token.
Um ihre Anwendung zusätzlich abzusichern, sollten Verfahren wie Rate-Limiting und fail2Ban
verwendet werden.
Signierung
Die Cloud kann das Webhook-Request, das an deine Anwendung gesendet wird, optional signieren. Hierzu wird ein X-Purelife-Cloud-Signature
-Header zu Request hinzugefügt. Somit kann verifiziert werden, dass das Request von der PureLife Cloud und nicht von jemand anderen gesendet wurde.
Um ihre Requests zu signieren, muss für den Webhook ein Secret hinterlegt werden.
Verifizierung
Der Header X-Purelife-Cloud-Signature
in jedem signierten Request enthält einen Hinweis auf den verwendeten Hash-Algorithmus und Signatur.
Die Cloud generiert Signaturen unter Verwendung eines Hash-basierten Authentifizierungscodes (HMAC) mit SHA256. Mit den folgenden Schritten ist eine Verifizierung möglich:
- Teile den Header mit dem Symbol
=
in zwei Teile, um den verwendeten Hash-Algorithmus und die Signatur zu erhalten - Berechne einen HMAC mit einer SHA256-Hashfunktion. Verwende das hinterlegt
Secret
als geheimen Schlüssel und den Body des Requests als Nachricht. - Kodiere den errechneten HMAC als Hexadezimalwert
- Vergleiche die Signatur der Kopfzeile mit der errechneten Signatur
Response
Die Cloud erwartet von der angesprochenen Anwendung keine bestimmte Antwort, jedoch sollte die Anfrage schnell verarbeitet werden. Die Cloud wartet dabei maximal 3 Sekunden, bevor es das Request abbricht und erneut versucht. Sollte die Anwendung es nicht schaffen, eine Anfrage innerhalb von 3 Sekunden zu verarbeiten, wird eine Zustellung nicht möglich sein. Dies ist notwendig, da es bei der Anbindung vieler Sensoren zu vielen Anfragen kommen kann und ein Blockieren von der Cloud verhindert werden soll.
Status Codes
Um die Fehleranalyse zu vereinfachen, ist es empfehlenswert, die Standard-HTTP-Status-Codes zu nutzen. Wichtig ist hierbei, dass für ein erfolgreich erkanntes Request der Status-Code 200 oder 201 gesendet wird, da es ansonsten dazu kommen kann, dass die Cloud die Anfrage als Fehler interpretiert und sie wiederholt.
Wiederholungsmechanismus
Sollte es der Cloud nicht möglich sein, das Request erfolgreich an die Anwendung zuzustellen, wird versucht, die Anfrage zu wiederholen. Sollte es nach dem dritten Versuch nicht möglich sein, die Anfrage zuzustellen, wird sie verworfen. Die Abstände zwischen den Versuchen wird dabei durch einen exponentiellen Backoff-Algorithmus berechnet.
Verhalten bei Fehlern
Sollte ein Fehler auftreten, wird dieser intern geloggt, jedoch nicht automatisch an sie weitergeleitet. Sollte der Verdacht eines Problems vorliegen, wende dich an deinen Administrator.
Aufbau des Requests
Der Aufbau und die Formatierung kann pro Webhook eingestellt werden.
Siehe: Webhook API-Dokumentation
Verwendung
Der Webhook kann als Account-Bot (für die Verwendung im Regelwerk) oder als Kunden-Bot (für eine unabhängige Verwendung) erstellt und verwendet werden.