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
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
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
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
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
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
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
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
Abbildung 8: Link um Funktions-URL abzurufen

Erfahren Sie mehr

Office 365 Groups als Evolution von SharePoint?
Blog
Blog

Office 365 Groups als Evolution von SharePoint?

Zusätzlich zu SharePoint erlauben die Office 365 Groups es mir als Anwender, schnell und einfach neue Gruppen anzulegen und selbständig Benutzer hinzuzufügen.

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow
Blog
Blog

Ich bin im Flow! – Eine Übersicht zu Microsoft Flow

Die Power Platform wird aktuell von Microsoft sehr stark gepusht. Zeit, sich mit dem Potenzial der einzelnen Komponenten zu beschäftigen. Heute: Flow.

Das neuste Mitglied der Office 365 Familie: Delve
Blog
Blog

Das neuste Mitglied der Office 365 Familie: Delve

Microsoft legt nach: Mit Delve startet eine neue Form des Suchens und des Auffinden von Dokumenten und Informationen.

Paket Dependency Manager für .NET
Blog
Blog

Paket Dependency Manager für .NET

Paket ist ein Dependency Manager für .NET, welcher es sich zum Ziel gesetzt hat einige Probleme von NuGet zu beheben.

Sprechen Sie LUIS? – Der intelligente Chat-Bot im Praxistest
Blog
Blog

Sprechen Sie LUIS? – Der intelligente Chat-Bot im Praxistest

Mit LUIS, der Sprach- und Texterkennungssoftware von Microsoft, und dem Bot Framework von Azure haben wir eine Lösung für den IT-Support entwickelt.

Nov
07
Webcast mit Microsoft: Das Intranet zu Ende gedacht
Webinar
Webinar

Webcast mit Microsoft: Das Intranet zu Ende gedacht

Am 07. November findet erneut eines unserer Webinare gemeinsam mit Mircosoft statt. Das Thema dieses Mal: Das Intranet zu Ende gedacht – Die Informationszentral...

novaCapta auf der Fachtagung für Interne Revision
Event
Event

novaCapta auf der Fachtagung für Interne Revision

Das Expertenteam der novaCapta präsentiert am 15. und 16. November ihre innovative Audit Management Lösung auf dem DIIR-Kongress in Dresden. Besuchen Sie unsere...

May
04
novaCapta auf der dotnet Cologne
Event
Event

novaCapta auf der dotnet Cologne

In nächster Nachbarschaft zu unserem Kölner Büro findet am 04. und 05. Mai die dotnet Cologne im KOMED statt. Wir von der novaCapta sind auch dabei.

PowerApps – Neuigkeiten, Übersicht, Tipps & Tricks
Blog
Blog

PowerApps – Neuigkeiten, Übersicht, Tipps & Tricks

Neues aus der Welt von PowerApps

Valo ist neuer Partner der novaCapta für Intranets
News
News

Valo ist neuer Partner der novaCapta für Intranets

Durch die Partnerschaft mit Valo, dem Ready-2-Go Intranet-Baukasten aus Finnland baut die novaCapta ihr Angebot bei der Umsetzung von schnellen und funktionalen...

Mit der HoloLens ein Stück Berlin nach Köln holen
News
News

Mit der HoloLens ein Stück Berlin nach Köln holen

Im Rahmen eines zweitägigen Hackathons haben sich einige Mitarbeiter der novaCapta der Microsoft HoloLens und dem Thema Mixed Reality gewidmet. Dabei haben wir...

Auf Goldkurs in der Cloud
News
News

Auf Goldkurs in der Cloud

Die novaCapta hat ihren Partnerstatus bei Microsoft zusätzlich vergoldet: Auch in der Sparte Cloud Productivity haben wir jetzt den Goldstatus.