APIs spielen eine entscheidende Rolle bei der Vernetzung von Anwendungen, sind jedoch auch anfällig für Angriffe. Früher gab es bei monolithischen Anwendungen nur einen einzigen Zugangspunkt, der abgesichert werden musste. In Microservices-Architekturen besteht eine einzelne Anwendung häufig aus vielen Microservices, die über APIs miteinander verbunden sind, wobei jede dieser APIs Hunderte von Endpunkten haben kann. Dadurch entsteht eine enorme potenzielle Angriffsfläche für APIs, da jede neue API einen weiteren Zugangspunkt innerhalb Ihres Sicherheitsperimeters schafft.
Es gibt viele Strategien zum Schutz Ihrer APIs. Eine der grundlegendsten ist die Zugriffskontrolle. Einfach ausgedrückt müssen Sie die Identität des Benutzers überprüfen (Authentifizierung bzw. AuthN) und sicherstellen, dass er auf bestimmte Ressourcen zugreifen darf (Autorisierung bzw. AuthZ). Die Implementierung von OpenID Connect (OIDC) ist einer der gängigsten Ansätze zur Zugriffskontrolle bei APIs. Mit dem API Connectivity Manager, einem Bestandteil der F5 NGINX Management Suite, können Sie dies innerhalb weniger Minuten einrichten.
In diesem Tutorial erfahren Sie, wie Sie den Autorisierungsteil des OIDC-Workflows durchführen, indem Sie die Validierung von JSON Web Tokens (JWT) mit API Connectivity Manager und Azure Active Directory (Azure AD) einrichten.
Was ist OpenID Connect?
OpenID Connect (OIDC) ist ein Identitätsprotokoll, das auf dem OAuth 2.0-Protokoll aufbaut. Mit OIDC können Clients die Identität des Endbenutzers oder Geräts überprüfen. Dies ist ein Teil der Zugriffskontrolle, die sowohl Authentifizierung als auch Autorisierung umfasst:
- Authentifizierung überprüft, ob ein Benutzer oder Gerät tatsächlich die angegebene Identität besitzt
- Autorisierung legt fest, worauf ein verifizierter Benutzer oder ein verifiziertes Gerät zugreifen kann
Es gibt viele verschiedene Implementierungen von OIDC, darunter Azure AD, das Sie in diesem Tutorial verwenden werden. Alternativ können Sie mit API Connectivity Manager auch andere OIDC-Lösungen verwenden, beispielsweise F5 BIG-IP Access Policy Manager (APM), Okta, Auth0, Ping Identity und weitere.
Was Sie für den Einstieg benötigen
Stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:
- API Connectivity Manager in Ihrer Umgebung installiert und konfiguriert
- Ein aktives Microsoft Azure-Konto
- Ein REST-Client (Postman wird in diesem Tutorial verwendet)
Sie können sich für eine 30-tägige kostenlose Testversion der NGINX Management Suite registrieren, wenn Sie Zugriff auf den API Connectivity Manager benötigen.
Eine Azure AD-Anwendung erstellen
Öffnen Sie einen Browser und melden Sie sich bei Ihrem Azure-Portal an.
Klicken Sie im Menü auf der linken Seite auf „App-Registrierungen“.

Abbildung 1: Startseite des Azure-AD-Portals
Klicken Sie auf die Schaltfläche „Neue Registrierung“.

Abbildung 2: Azure AD-App-Registrierung
Um eine neue Anwendung zu erstellen, geben Sie einen Namen, einen Umleitungs-URI ein und klicken Sie auf die Schaltfläche „Registrieren“. In dieser Demo verwenden Sie Postman, daher nutzen Sie den Postman-OIDC-Umleitungs-URI.

Abbildung 3: Erstellen einer neuen Azure AD-App
Nachdem Ihre App nun erstellt wurde, müssen Sie OAuth-Bereiche erstellen, um den Zugriff auf die API zu ermöglichen. Klicken Sie im Menü auf der linken Seite auf den Link „Eine API verfügbar machen“.

Abbildung 4: Eine API bereitstellen
Klicken Sie auf „Bereich hinzufügen“.

Abbildung 5: Einen Bereich hinzufügen
Übernehmen Sie den standardmäßigen Anwendungs-ID-URI, oder erstellen Sie einen eigenen, und klicken Sie auf die Schaltfläche „Speichern und fortfahren“. Wenn Sie einen eigenen Anwendungs-ID-URI erstellen möchten, müssen Sie die gewünschte Domäne bei Azure AD registrieren.

Abbildung 6: Anwendungs-ID-URL
Für diese Demo basiert Ihr Bereich auf einem Microsoft-Beispiel. Füllen Sie das Formular mit den folgenden Informationen aus und klicken Sie anschließend auf die Schaltfläche „Bereich hinzufügen“:
Bereichsname: Employees.Read.All
Wer kann zustimmen?: Administratoren und Benutzer
Anzeigename für die Administratoreinwilligung: Schreibgeschützter Zugriff auf Mitarbeiterdatensätze
Beschreibung der Administratoreinwilligung: Schreibgeschützten Zugriff auf alle Mitarbeiterdaten zulassen.
Anzeigename für die Benutzereinwilligung: Schreibgeschützter Zugriff auf Ihre Mitarbeiterdatensätze
Beschreibung der Benutzereinwilligung: Schreibgeschützten Zugriff auf Ihre Mitarbeiterdaten zulassen.

Abbildung 7: Bereich hinzufügen
Als Nächstes müssen Sie die Clientanwendung autorisieren. Rufen Sie dazu die Client-ID ab. Klicken Sie im Menü auf der linken Seite auf den Link „Übersicht“ und kopieren Sie die „Anwendungs-ID (Client)“.

Abbildung 8: Anwendungs-Client-ID
Klicken Sie erneut auf den Link „API verfügbar machen“ und anschließend auf die Schaltfläche „Clientanwendung hinzufügen“.

Abbildung 9: Client-Anwendung hinzufügen
Fügen Sie die Anwendungsclient-ID in das Feld „Client-ID“ ein und aktivieren Sie das Kontrollkästchen neben Ihrer Anwendungs-ID-URI. Klicken Sie anschließend auf die Schaltfläche „Anwendung hinzufügen“.

Abbildung 10: Client-Anwendung hinzufügen
Als Nächstes verwenden Sie für diese Demo einen Autorisierungscode mit dem Autorisierungscodeflow. Daher wird für Postman ein geheimer Clientschlüssel benötigt. Klicken Sie im Menü auf der linken Seite auf den Link Zertifikate und Geheimnisse und anschließend auf die Schaltfläche Neuer geheimer Clientschlüssel.

Abbildung 11: Neues Client-Geheimnis
Benennen Sie Ihr Geheimnis und behalten Sie die standardmäßige Ablaufzeit bei.

Abbildung 12: Geheimer Name
Kopieren Sie als Nächstes Ihren geheimen Clientschlüssel und speichern Sie ihn in einem Passwort-Tresor, damit Sie ihn später verwenden können.

Abbildung 13: Client Secret
JWT-Assertion im API Connectivity Manager konfigurieren
Nachdem Sie Ihre Azure AD-Anwendung konfiguriert haben, können Sie den API-Gateway-Cluster im API Connectivity Manager so einrichten, dass er für den von Ihnen definierten Dienst eine JSON Web Token Assertion durchführt. Für diesen Schritt müssen Sie den URI für die JSON Web Key (JWK) Sets Ihres Azure AD-Mandanten ermitteln.
Sie können Ihren JWKS-URI über den Well-Known-Endpunkt Ihres Azure AD-Mandanten abrufen:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration
Diese Seite stellt eine JSON-Nutzlast bereit, die den Schlüssel jwks_uri enthält. Kopieren Sie den zugehörigen Wert.

Abbildung 14: Well-Known-Endpunkt des Azure-AD-Mandanten
Nachdem Sie nun über Ihre JWKS-URI verfügen, öffnen Sie die API Connectivity Manager-Konsole und navigieren Sie zur Konfiguration Ihres Service-Proxys. Klicken Sie auf „Richtlinie hinzufügen“ für die Richtlinie „JSON-Web-Token-Assertion“.

Abbildung 15: Proxy-Richtlinien für den Gateway-Dienst
Fügen Sie als Nächstes den JKWS-URI Ihres Azure AD-Mandanten in das Feld „URI-Speicherort“ ein und klicken Sie anschließend auf die Schaltfläche „Hinzufügen“.

Abbildung 16: JSON-Web-Token-Assertion-Richtlinie
Klicken Sie auf die Schaltfläche „Speichern und veröffentlichen“, um diese Richtlinie in Ihrem API-Gateway-Cluster bereitzustellen.

Abbildung 17: Service-Gateway-Richtlinie
Das war's! Ihre API-Connectivity-Manager-Instanz ist jetzt so konfiguriert, dass sie eine JWT-Assertion auf dem konfigurierten Service-Gateway durchführt.
Testen mit Postman
Jetzt ist es an der Zeit, Ihre Konfiguration zu testen und sicherzustellen, dass sie sich wie erwartet verhält. Zunächst benötigen Sie einige Angaben aus Ihrer Azure AD-Anwendung:
- Geheimer Clientschlüssel der Anwendung (diesen haben Sie zuvor gespeichert)
- OAuth-Berechtigungsumfang
- OAuth-Autorisierungsendpunkt
- OAuth-Token-Endpunkt
Um den OAuth-Bereich abzurufen, öffnen Sie Ihr Azure-Portal und navigieren Sie zurück zur Registrierungsseite Ihrer App. Klicken Sie anschließend im Menü auf der linken Seite auf den Link „Eine API verfügbar machen“ und dann auf das Symbol „Kopieren“ für Ihren Bereich. Speichern Sie diesen Wert, damit Sie ihn in wenigen Minuten verwenden können.

Abbildung 18: API-Berechtigungsbereiche
Um die OAuth-Autorisierungs- und Token-Endpunkte abzurufen, klicken Sie im Menü auf der linken Seite auf den Link „Übersicht“ und anschließend auf die Schaltfläche „Endpunkte“. Kopieren Sie danach die URIs der Autorisierungs- und Token-Endpunkte.

Abbildung 19: Azure AD-Anwendungsendpunkte

Abbildung 20: Endpunkt-URLs der Azure-AD-Anwendung
Öffnen Sie Postman und klicken Sie auf das Menü „Environments“. Klicken Sie anschließend auf den Link „Create Environment“.

Abbildung 21: Postman-Umgebung erstellen
Benennen Sie Ihre Umgebung und fügen Sie sechs Variablen mit den in den vorherigen Schritten gespeicherten Werten in die Spalten „Initial Value“ und „Current Value“ ein. Klicken Sie anschließend auf die Schaltfläche „Save“.
- client_id: Client-ID der Azure AD-Anwendung
- client_secret:Clientschlüssel der Azure AD-Anwendung
- auth_url: OAuth-Autorisierungs-URL des Azure AD-Mandanten
- token_url: OAuth-Token-URL des Azure-AD-Mandanten
- tenant_id: Azure AD-Verzeichnis-ID (Mandanten-ID)
- scope: API-Bereich der Azure AD-Anwendung mit Anwendungs-ID-URL

Abbildung 22: Postman-Umgebungsvariablen
Öffnen Sie in Postman eine neue Registerkarte und führen Sie die folgenden Schritte aus:
- Ändern Sie oben rechts Ihre Umgebung in „ACM“.
- Fügen Sie Ihre API-URL in die Adressleiste ein
- Klicken Sie auf die Registerkarte „Authentifizierung“.
- Ändern Sie den Typ in OAuth 2.0
- Scrollen Sie in der Authentifizierungskonfiguration nach unten und legen Sie die folgenden Variablen fest:
- Authentifizierungs-URL: {{auth_url}}
- Zugriffstoken-URL: {{token_url}}
- Client-ID: {{client_id}}
- Client-Geheimnis: {{client_secret}}
- Klicken Sie auf die Schaltfläche „Neues Zugriffstoken abrufen“.

Abbildung 23: Postman-Anfrage

Abbildung 24: Postman-Authentifizierungskonfiguration
Ein Browserfenster wird geöffnet und Sie werden aufgefordert, sich mit Ihren Azure AD-Anmeldeinformationen anzumelden. Nach erfolgreicher Authentifizierung werden Sie zurück zu Postman weitergeleitet und das folgende Fenster wird angezeigt. Klicken Sie auf die Schaltfläche „Token verwenden“.

Abbildung 25: Token in Postman verwenden
Nachdem Sie nun über Ihr OAuth-Zugriffstoken verfügen, können Sie endlich Ihren API-Aufruf durchführen. Klicken Sie auf die Schaltfläche „Speichern“ und anschließend auf die Schaltfläche „Senden“.
Wenn alles korrekt konfiguriert ist, sollten Sie eine „200 OK“-Antwort erhalten.

Abbildung 26: Erfolgreiche Postman-Anfrage
Fazit
Ihre APIs werden nun durch den API Connectivity Manager mithilfe von Azure AD OAuth-Zugriffstoken geschützt. Als Nächstes könnten Sie zusätzliche OAuth-Bereiche hinzufügen und den API-Gateway-Cluster im API Connectivity Manager so konfigurieren, dass diese Bereiche an Ihre geschützten APIs weitergegeben werden – aber das ist ein Thema für einen anderen Beitrag!
Legen Sie noch heute los
Starten Sie eine 30-tägige kostenlose Testversion der NGINX Management Suite, die den API Connectivity Manager und den Instance Manager umfasst.
Eine Version dieses Beitrags erschien zuerst auf codygreen.com. Sie wurde redaktionell bearbeitet und wird hier mit Genehmigung des Autors erneut veröffentlicht.
Über den Autor
Ähnliche Blogbeiträge
Die Zukunft von NGINX: Zurück zu unseren Open-Source-Wurzeln
Beim NGINX Sprint 2022 besinnen wir uns auf unsere Open-Source-Wurzeln. Erfahren Sie mehr über die Initiativen, die wir im kommenden Jahr verfolgen, und teilen Sie uns mit, was Sie sich wünschen.

Ein Leitfaden zur Auswahl eines Ingress-Controllers, Teil 1: Ermitteln Sie Ihre Anforderungen
Ein Ingress-Controller kann eines der leistungsstärksten Tools in Ihrem Kubernetes-Stack sein. Erfahren Sie, wie Sie Ihre Ingress-Anforderungen ermitteln, um die beste Option auszuwählen.
Bereitstellung des NGINX Ingress Controllers auf Amazon EKS: So haben wir getestet
Wir haben kürzlich den Lösungsleitfaden zum NGINX Ingress Controller um Empfehlungen zur Dimensionierung für Amazon Elastic Kubernetes Service (EKS) ergänzt. In diesem Blogbeitrag erläutern wir, wie wir diese Empfehlungen erarbeitet haben, und stellen Ihnen alle Informationen zur Verfügung, die Sie benötigen, um selbst ähnliche Tests durchzuführen.

Protokollierung des Datenverkehrs zwischen NGINX und Upstream-Servern bei CDN77
Bei der Fehlersuche bei Datenverkehrsproblemen zwischen NGINX und Upstream-Servern konnte CDN77 die benötigten Daten nur aus dem Fehlerprotokoll mit aktivierter Debug-Ausgabe beziehen, was die Leistung beeinträchtigt und riesige Dateien erzeugt. Daher entwickelte das Team ein neues benutzerdefiniertes Modul, das ausschließlich die benötigten Daten protokolliert.
Ankündigung von NGINX Plus R16
NGINX Plus R16 ist eine einheitliche, elastische Ingress- und Egress-Schicht für Anwendungen, die die Funktionen eines Load Balancers, API-Gateways und einer WAF vereint und neue Features wie clusterfähige Ratenbegrenzung, Schlüssel-Wert-Speicher, „Random with Two Choices“, verbessertes UDP-Load-Balancing und vieles mehr bietet.
5 Gründe für den Umstieg auf softwarebasiertes Load Balancing
Entdecken Sie fünf Gründe für den Wechsel zu einem softwarebasierten Load Balancer wie NGINX Plus, darunter Kosteneinsparungen, die Einführung von DevOps und eine einheitliche Lösung für alle Umgebungen.