Azure Functions als Helfer für clientseitige Lösungen mit 3rd Party APIs – Der Webservice ohne Webserver

In Zeiten von clientseitigen Lösungen kann es passieren, dass man eine 3rd Party Web API anfragen möchte, über deren Authentifizierung man keine Kontrolle hat. Das kann zu einem unangenehmen Problem führen.

Das Problem:

Man muss sich bei der API authentifizieren. Wenn die Nutzer selbst keinen Zugriff haben, geschieht das in der Regel über eine Kombination aus Secret und Token oder andere Zugangsdaten. Wenn die API zu mehr fähig ist als nur das Abfragen von gewünschten, nicht sensiblen Daten, birgt das Gefahren. Der Code ist bei clientseitigen Lösungen für alle sichtbar. Das heißt Endnutzer könnten die Zugangsdaten im Code auslesen und die API möglicherweise im vollen Umfang nutzen. Im schlimmsten Fall wären sie in der Lage, Daten zu manipulieren und sensible Daten abzufragen.

Die Lösung:

Azure-Functions können als Zwischenschicht zur Authentifizierung bei der API genutzt werden. So wird sichergestellt, dass die Zugriffsdaten niemals im Client-Code zu finden sind. 

Wie erstelle ich eine Azure Function?

Um Azure-Functions zu benutzen, wird eine gültige Azure Subscription benötigt. Unter portal.azure.com kann man sich dann mit dem entsprechenden Microsoft-Konto einloggen und eine neue Ressource anlegen. Bei der Art der Ressource wählen wir eine „Azure Functions App“. Wenn bereits eine Funktions-App existiert, kann man auch diese verwenden. Beim Erstellen der Funktions-App müssen folgende Daten angegeben werden:

  • App-Name: Der Name der Funktions-App, die später unsere Azure Functions enthält
  • Abonnement: Das Abonnement, über das die Funktions-App abgerechnet werden
  • Ressourcengruppe: Die Ressourcengruppe, zu der die App hinzugefügt werden soll (z.B. die gleiche Gruppe, in der bereits eine etwaige Web-App und Datenbank für das Projekt existieren)
  • OS: Das Betriebssystem, unter dem die Funktions-App läuft
  • Veröffentlichen (Nur, wenn bei OS „Linux“ gewählt wurde): Hier kann gewählt werden, wie die Funktionen unter Linux bereitgestellt werden
  • Hostingplan: Art der Abrechnung für die Funktion
  • Standort: Standort des Servers, auf dem die App gehostet wird
  • Laufzeitstapel: Diese Einstellung bestimmt, in welcher Programmiersprache die Azure Functions geschrieben werden können
  • Storage: Ein Speicherkonto, das von den Funktionen für verschiedene Operationen genutzt wird (wenn unter Hostingplan der Verbrauchstarif gewählt wurde, wird der Funktionscode ebenfalls in dem Speicherkonto abgelegt; wird das Speicherkonto gelöscht, wird der Funktionscode ebenfalls gelöscht)

Nachdem die Daten angegeben wurden, kann die App erstellt werden.
Als nächstes muss eine Funktion angelegt werden. Wenn wir die Funktions-App öffnen, bietet sie uns dies auch direkt an.


Abbildung 1: Vorschlag der Funktions-App eine neue Funktion hinzuzufügen

Nach einem Klick auf „Neue Funktion“ haben wir die Möglichkeit, die gewünschte Entwicklungsumgebung zu wählen und erhalten danach direkt eine Anleitung, um mit der Umgebung eine Funktion zu erstellen.


Abbildung 2: Auswahlmöglichkeiten für die Entwicklungsumgebung

Wählt man etwas anderes als „Im Portal“, muss außerdem danach noch die Bereitstellungsmethode gewählt werden. Im Beispiel verwende ich „Visual Studio“ und „Direkte Veröffentlichung“.


Abbildung 3: Auswahl der Bereitstellungsmethode

Als nächstes erhalten wir eine Anleitung, die uns in Visual Studio durch das Anlegen eines Azure-Functions-Projekts führt. Beim Erstellen des Projekts kann man aus einer Auswahl von Triggern wählen. Der Http-Trigger ist für unseren Zweck am besten geeignet.


Abbildung 4: Auswahl des Funktionstriggers

Das Projekt enthält nun eine Datei namens „Function1.cs“. Dies ist der Code unserer Azure-Function. Ein Beispiel, um Query Parameter und Request Body zu parsen sowie ein Ergebnis zurück zu liefern, ist bereits enthalten. Natürlich lässt sich der Name verändern und der Code an die eigenen Wünsche anpassen.

Das Veröffentlichen der Funktion funktioniert per Rechtsklick auf das Projekt. Im Kontext-Menü wird dann der Punkt „Veröffentlichen“ angeklickt. Als Veröffentlichungsziel kann dann unter dem Reiter „Azure-Funktionen-App“ der Punkt „Vorhandenes Element auswählen“ angeklickt werden. Nach einer Anmeldung mit dem Konto, das auch im Azure Portal angemeldet ist, kann die bereits erstellte Funktionen-App ausgewählt werden.

Wie löst die Azure-Function unser Problem?

Wir führen die gesamte Interaktion mit der API nur in Azure-Functions durch und stellen dann die Funktionsendpunkte unserer Clientanwendung zur Verfügung. Da die möglichen Interkationen durch die Azure-Functions vorgegeben sind und die API Zugangsdaten privat in der Azure-Function gespeichert sind, gibt es keine Chance für Endnutzer, die API zu missbrauchen.


Abbildung 5: Code der Azure-Function, um einen API Zugriff durchzuführen

In diesem Beispiel wird die API einer Sammelkartenhandelsplattform angesprochen. Es wird der Endpunkt angesprochen, der es erlaubt, eine Wunschliste mit einer spezifischen ID zu beziehen.

Die Authentifizierung an der API wird durch eine zusätzliche Klasse erledigt. In dieser Klasse werden die Tokens und Secrets gehalten und eine Signatur erstellt. Die Secrets, Tokens und Signatur werden anschließend verwendet, um den Header für den Web-Request gegen die API zu erstellen.


Abbildung 6: Beispiel für die Haltung von Authentifizierungsdaten in der Azure-Function

Aus der Clientanwendung kann nun der Endpunkt der Azure-Function ohne Authentifizierung aufgerufen werden. Es stehen allerdings nur die API Funktionen zur Verfügung, die durch die Azure-Function nach außen bereitgestellt werden.


Abbildung 7: Beispiel für die Verwendung des Funktionsendpunkts aus der Clientanwendung

Wo finde ich die Funktionsendpunkte?

Navigiert man in der Funktionen-App zu einer Funktion und wählt sie aus, erscheint oben rechts ein Punkt namens „Functions-URL abrufen“. Klickt man auf diesen Punkt, kann man die URL ganz einfach kopieren.


Abbildung 8: Link um Funktions-URL abzurufen

Bildnachweise

By |2019-05-27T11:02:15+01:00May 27th, 2019|Azure, Office 365|0 Comments

About the Author:

Technololy Specialist

Leave a Reply

%d bloggers like this:

novaCapta verwendet Cookies, um die Funktionalität dieser Website zu verbessern. Durch die Nutzung dieser Seite stimmen Sie der Verwendung von Cookies zu. Weiterlesen

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close