Webhooks eignen sich wunderbar dazu, Aktionen bei bestimmten Server-Ereignissen anzustoßen, nur sind sie von Haus aus nicht sonderlich sicher. Ein API Key soll den Zugriff auf unsere in diesem Tutorial erstellte Azure Function künftig absichern.
In den Webhooks-Einstellungen von GitHub können wir ein eigenes Secret für unsere Payload-URL hinterlegen.
(Bild: Drilling / GitHub)
Unsere Azure-Function horcht auf jede Nutzlast, die vom konfigurierten Endpunkt gesendet wird, sobald sie zum Empfang von Nutzlasten konfiguriert ist. Oft möchte man aber aus Sicherheitsgründen nur Anforderungen von beispielsweise GitHub akzeptieren und von nirgendwo anders her.
Für ein solches Unterfangen sind verschiedene Möglichkeiten denkbar. Man könnte Anforderungen z. B. nur von GitHub-IP-Adressen erlauben. Professioneller und trotzdem einfacher einzurichten ist es, ein geheimes Token zu konfigurieren und Anforderung nur bei validem Token zuzulassen.
Für die Konfiguration eines Webhooks steht unter GitHub das Feld „Secret“ zur Verfügung
(Bild: Drilling / GitHub)
Mit dem Einrichten eines Webhook-Secrets kann man sicherstellen, dass an die Nutzlast-URL gesendete POST-Anforderungen von GitHub sind. Dazu steht beim Konfigurieren eines Webhooks das bisher nicht besprochene Feld „Secret“ zur Verfügung. Wenn man so ein Geheimnis festlegt, erhält die Webhook-POST-Anforderung den x-hub-signature-Header.
Zur Vorbereitung der Secret-Verwendung in unsere Azure-Function navigieren wir im Azure-Portal erneut zu unserer Funktion und bearbeiten wieder unsere JavaScript-Datei index.js und ergänzen am Anfang der Datei einen Verweis auf die crypto-js-Bibliothek mit Hilfe der module.exports-Anweisung:
const Crypto = require('crypto');
Im Bereich „Funktionsschlüssel“ unter Azure können wir den bestehenden Default-Schlüsselwert in die Zwischenablage kopieren.
(Bild: Drilling / Microsoft)
Dann wechseln wir im Menü „Entwickler“ links zum Abschnitt „Funktionsschlüssel“ und zeigen den Wert des Standardschlüssels „default“. Dazu klickt man auf „Werte anzeigen“.
Nun können wir den bestehenden Default-Schlüsselwert in die Zwischenablage kopieren, wechseln dann zurück zum Funktions-Editor und ergänzen …
…, wobei der „<default key>“ entsprechend zu ersetzen ist.
Damit der Schlüssel allerdings dem Format von x-hub-signature im Anforderungs-Header entspricht, müssen wir noch ein „sha1=“ zu Beginn des Schlüssels einfügen:
const shaSignature = 'sha1=${signature}';
Dann müssen wir noch den Code zum Abrufen der GitHub-Signatur aus dem Anforderungs-Header ergänzen:
Das Verarbeiten der Anforderung sieht dann wie folgt aus:
Der aktualisierte http-Trigger mit API-Keys.
(Bild: Drilling / Microsoft)
if (!shaSignature.localeCompare(gitHubSignature)) {
// Existing code if (req.body.pages[0].title) {
... } } else {
context.res = {
status: 401, body: "Signatures don't match" }; }
Das in der Webhook-Konfiguration ergänzte Secret.
(Bild: Drilling / GitHub)
Jetzt müssen wie das Geheimnis natürlich nur in unseren Webhook-Settings auf GitHub eintragen.
Der „x-Hub-Signature“-Header.
(Bild: Drilling / Microsoft)
Klicken wir nun nach dem Anlegen einer neuen Wiki-Seite oder dem Bearbeiten einer Vorhandenen erneut auf „Update Webhook“, wird im Request-Header die „x-Hub-Signature“ angezeigt werden.
Das Ergebnis der Webhook-Analyse.
(Bild: Drilling / Microsoft)
Die Antwort bleibt natürlich gleich.
(ID:47138793)
Stand vom 30.10.2020
Es ist für uns eine Selbstverständlichkeit, dass wir verantwortungsvoll mit Ihren personenbezogenen Daten umgehen. Sofern wir personenbezogene Daten von Ihnen erheben, verarbeiten wir diese unter Beachtung der geltenden Datenschutzvorschriften. Detaillierte Informationen finden Sie in unserer Datenschutzerklärung.
Einwilligung in die Verwendung von Daten zu Werbezwecken
Ich bin damit einverstanden, dass die Vogel IT-Medien GmbH, Max-Josef-Metzger-Straße 21, 86157 Augsburg, einschließlich aller mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen (im weiteren: Vogel Communications Group) meine E-Mail-Adresse für die Zusendung von redaktionellen Newslettern nutzt. Auflistungen der jeweils zugehörigen Unternehmen können hier abgerufen werden.
Der Newsletterinhalt erstreckt sich dabei auf Produkte und Dienstleistungen aller zuvor genannten Unternehmen, darunter beispielsweise Fachzeitschriften und Fachbücher, Veranstaltungen und Messen sowie veranstaltungsbezogene Produkte und Dienstleistungen, Print- und Digital-Mediaangebote und Services wie weitere (redaktionelle) Newsletter, Gewinnspiele, Lead-Kampagnen, Marktforschung im Online- und Offline-Bereich, fachspezifische Webportale und E-Learning-Angebote. Wenn auch meine persönliche Telefonnummer erhoben wurde, darf diese für die Unterbreitung von Angeboten der vorgenannten Produkte und Dienstleistungen der vorgenannten Unternehmen und Marktforschung genutzt werden.
Falls ich im Internet auf Portalen der Vogel Communications Group einschließlich deren mit ihr im Sinne der §§ 15 ff. AktG verbundenen Unternehmen geschützte Inhalte abrufe, muss ich mich mit weiteren Daten für den Zugang zu diesen Inhalten registrieren. Im Gegenzug für diesen gebührenlosen Zugang zu redaktionellen Inhalten dürfen meine Daten im Sinne dieser Einwilligung für die hier genannten Zwecke verwendet werden.
Recht auf Widerruf
Mir ist bewusst, dass ich diese Einwilligung jederzeit für die Zukunft widerrufen kann. Durch meinen Widerruf wird die Rechtmäßigkeit der aufgrund meiner Einwilligung bis zum Widerruf erfolgten Verarbeitung nicht berührt. Um meinen Widerruf zu erklären, kann ich als eine Möglichkeit das unter https://support.vogel.de abrufbare Kontaktformular nutzen. Sofern ich einzelne von mir abonnierte Newsletter nicht mehr erhalten möchte, kann ich darüber hinaus auch den am Ende eines Newsletters eingebundenen Abmeldelink anklicken. Weitere Informationen zu meinem Widerrufsrecht und dessen Ausübung sowie zu den Folgen meines Widerrufs finde ich in der Datenschutzerklärung, Abschnitt Redaktionelle Newsletter.