BLOG | NGINX

Sicherer API-Zugriff mit NGINX und Azure Active Directory

NGINX-Teil-von-F5-horiz-schwarz-Typ-RGB
Cody Green Miniaturbild
Cody Grün
Veröffentlicht am 06. Oktober 2022

APIs spielen eine entscheidende Rolle bei der Anwendungskonnektivität, sie sind jedoch auch anfällig für Angriffe. In der Vergangenheit gab es bei monolithischen Apps nur einen Einstiegspunkt, der gesichert werden musste. In Microservices-Architekturen besteht eine einzelne App oft aus vielen Microservices, die über APIs verbunden sind, und jede dieser APIs kann Hunderte von Endpunkten haben. Dadurch wird die potenzielle Angriffsfläche für APIs riesig, da jede neue API einen Einstiegspunkt in Ihren Sicherheitsbereich schafft.

Es gibt viele Strategien zum Sichern Ihrer APIs. Eine der grundlegendsten ist die Zugriffskontrolle . Einfach ausgedrückt müssen Sie die Identität des Benutzers überprüfen (Authentifizierung oder AuthN) und bestätigen, dass er auf bestimmte Ressourcen zugreifen kann (Autorisierung oder AuthZ). Die Implementierung von OpenID Connect (OIDC) ist einer der am häufigsten verwendeten Zugriffskontrollansätze für APIs. Mit dem API Connectivity Manager , einem Teil der F5 NGINX Management Suite , können Sie es in wenigen Minuten zum Laufen bringen.

In diesem Tutorial erfahren Sie, wie Sie den Autorisierungsteil des OIDC-Workflows durchführen, indem Sie die JSON Web Token (JWT)-Validierung 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. OIDC ermöglicht Clients, die Identität des Endbenutzers oder Geräts zu überprüfen. Dies ist ein Teil der Zugriffskontrolle, die sowohl Authentifizierung als auch Autorisierung umfasst:

  • Durch die Authentifizierung wird überprüft, ob ein Benutzer oder Gerät die Person ist, für die er sich ausgibt
  • Die Autorisierung bestimmt, auf was ein verifizierter Benutzer oder ein verifiziertes Gerät zugreifen kann

Es gibt viele verschiedene Implementierungen von OIDC, einschließlich Azure AD, das Sie in diesem Tutorial verwenden werden. Alternativ können Sie mit API Connectivity Manager andere OIDC-Lösungen verwenden, etwa F5 BIG-IP Access Policy Manager (APM), Okta, Auth0, Ping Identity und mehr.

Was Sie für den Einstieg benötigen

Stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

Sie können sich für Ihre 30-tägige kostenlose Testversion der NGINX Management Suite anmelden, wenn Sie Zugriff auf den API Connectivity Manager benötigen.

Erstellen einer Azure AD-Anwendung

Öffnen Sie einen Browser und melden Sie sich bei Ihrem Azure-Portal an.

Klicken Sie im linken Menü auf App-Registrierungen .

Startseite des Azure AD-Portals

Abbildung 1: Startseite des Azure AD-Portals

Klicken Sie auf die Schaltfläche Neu registrieren .

Azure AD-App-Registrierung

Abbildung 2: Azure AD-App-Registrierung

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

Erstellen einer neuen Azure AD-App

Abbildung 3: Erstellen einer neuen Azure AD-App

Nachdem Ihre App erstellt wurde, müssen Sie OAuth-Bereiche erstellen, um Zugriff auf die API zu ermöglichen. Klicken Sie im linken Menü auf den Link „API verfügbar machen“ .

Bereitstellen einer API

Abbildung 4: Bereitstellen einer API

Klicken Sie auf „Bereich hinzufügen“ .

Hinzufügen eines Bereichs

Abbildung 5: Hinzufügen eines Bereichs

Akzeptieren Sie die standardmäßige Anwendungs-ID-URI oder erstellen Sie Ihre eigene und klicken Sie auf die Schaltfläche „Speichern und fortfahren“ . Wenn Sie Ihre eigene Anwendungs-ID-URI erstellen möchten, müssen Sie Ihre gewünschte Domäne bei Azure AD registrieren.

Anwendungs-ID-URL

Abbildung 6: Anwendungs-ID-URL

Für diese Demo basiert Ihr Umfang auf einem Microsoft -Beispiel . Füllen Sie das Formular mit den folgenden Informationen aus und klicken Sie dann auf die Schaltfläche „Bereich hinzufügen“ :

Bereichsname: Mitarbeiter.Alles.Lesen
Wer kann einwilligen?: Administratoren und Benutzer
Anzeigename der Administratoreinwilligung: Nur Lesezugriff auf Mitarbeiterdatensätze
Beschreibung der Administratoreinwilligung: Erlauben Sie schreibgeschützten Zugriff auf alle Mitarbeiterdaten.
Anzeigename der Benutzereinwilligung: Lesezugriff auf Ihre Personalakten
Beschreibung der Benutzereinwilligung: Erlauben Sie schreibgeschützten Zugriff auf Ihre Mitarbeiterdaten.

Hinzufügen eines Bereichs

Abbildung 7: Hinzufügen eines Bereichs

Als Nächstes müssen Sie die Clientanwendung autorisieren. Dazu greifen Sie auf die Client-ID zu. Klicken Sie im linken Menü auf den Link „Übersicht“ und kopieren Sie die Anwendungs-ID (Client-ID) .

Anwendungs-Client-ID

Abbildung 8: Anwendungs-Client-ID

Klicken Sie erneut auf den Link „API verfügbar machen“ und dann auf die Schaltfläche „Client-Anwendung hinzufügen“ .

Hinzufügen einer Clientanwendung

Abbildung 9: Hinzufügen einer Clientanwendung

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 dann auf die Schaltfläche „Anwendung hinzufügen“ .

Hinzufügen einer Clientanwendung

Abbildung 10: Hinzufügen einer Clientanwendung

Als Nächstes nutzen Sie für diese Demo einen Autorisierungscode mit dem Autorisierungscode-Flow , sodass für Postman ein Client-Geheimnis erforderlich ist. Klicken Sie im linken Menü auf den Link „Zertifikate und Geheimnisse“ und dann auf die Schaltfläche „Neues Client-Geheimnis“ .

Neues Client-Geheimnis

Abbildung 11: Neues Client-Geheimnis

Geben Sie Ihrem Geheimnis einen Namen und belassen Sie die standardmäßige Ablaufzeit.

Geheimer Name

Abbildung 12: Geheimer Name

Kopieren Sie als Nächstes Ihr Client-Geheimnis und speichern Sie es in einem Kennwort-Tresor, damit Sie es später verwenden können.

Client-Geheimnis

Abbildung 13: Client-Geheimnis

Konfigurieren Sie die JWT-Assertion im API Connectivity Manager

Nachdem Sie Ihre Azure AD-Anwendung nun konfiguriert haben, können Sie den API-Gateway-Cluster im API Connectivity Manager einrichten, um die JSON Web Token Assertion für Ihren definierten Dienst durchzuführen. Für diesen Schritt müssen Sie die URI für die JSON Web Key (JWK)-Sets Ihres Azure AD-Mandanten ermitteln.

Sie erhalten Ihre JWKS-URI von der Bekannter Endpunkt des Azure AD-Mandanten:
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. Sie müssen den Wert kopieren.

Bekannter Endpunkt des Azure AD-Mandanten

Abbildung 14: Bekannter Endpunkt des Azure AD-Mandanten

Nachdem Sie nun Ihre JWKS-URI haben, öffnen Sie Ihre API Connectivity Manager-Konsole und navigieren Sie zur Konfiguration Ihres Service-Proxys. Klicken Sie auf „Richtlinie hinzufügen“ für die JSON Web Token Assertion -Richtlinie.

Proxy-Richtlinien für Gateway-Dienste

Abbildung 15: Proxy-Richtlinien für Gateway-Dienste

Fügen Sie als Nächstes die JKWS-URI Ihres Azure AD-Mandanten in das Feld „URI-Speicherort“ ein und klicken Sie dann auf die Schaltfläche „Hinzufügen“ .

JSON Web Token Assertionsrichtlinie

Abbildung 16: JSON Web Token Assertionsrichtlinie

Klicken Sie auf die Schaltfläche „Speichern und veröffentlichen“, um diese Richtlinie an Ihren API-Gateway-Cluster zu übertragen.

Service-Gateway-Richtlinie

Abbildung 17: Service-Gateway-Richtlinie

Das ist es! Ihre API Connectivity Manager-Instanz ist jetzt so konfiguriert, dass sie JWT-Assertion auf dem konfigurierten Service-Gateway ausführt.

Testen mit Postman

Jetzt ist es Zeit, Ihr Setup zu testen und sicherzustellen, dass es sich wie erwartet verhält. Für den Einstieg müssen Sie einige Dinge aus Ihrer Azure AD-Anwendung abrufen:

  • Geheimer Anwendungsclient (Sie haben diesen zuvor gespeichert)
  • OAuth-Bereich
  • OAuth-Autorisierungsendpunkt
  • OAuth-Token-Endpunkt

Um den OAuth-Bereich zu erhalten, öffnen Sie Ihr Azure-Portal und navigieren Sie zurück zu Ihrer App-Registrierungsseite. Klicken Sie anschließend im linken Menü auf den Link „API verfügbar machen“ und klicken Sie auf das Kopiersymbol für Ihren Bereich. Speichern Sie diesen Wert, damit Sie ihn in wenigen Minuten verwenden können.

API-Bereiche

Abbildung 18: API-Bereiche

Um die OAuth-Autorisierungs- und Token-Endpunkte abzurufen, klicken Sie im linken Menü auf den Link „Übersicht“ und dann auf die Schaltfläche „Endpunkte“ . Kopieren Sie anschließend die Autorisierungs- und Token-Endpunkt-URIs.

Azure AD-Anwendungsendpunkte

Abbildung 19: Azure AD-Anwendungsendpunkte

Azure AD-Anwendungsendpunkt-URLs

Abbildung 20: Azure AD-Anwendungsendpunkt-URLs

Öffnen Sie Postman und klicken Sie auf das Menü „Umgebungen“ . Klicken Sie dann auf den Link „Umgebung erstellen“ .

Postman - Umgebung erstellen

Abbildung 21: Postman - Umgebung erstellen

Benennen Sie Ihre Umgebung und fügen Sie sechs Variablen mit den Werten (die Sie in den vorherigen Schritten gespeichert haben) in die Spalten „Anfangswert“ und „ Aktueller Wert“ ein. Klicken Sie anschließend auf die Schaltfläche „Speichern“ .

  • Client-ID : Client-ID der Azure AD-Anwendung
  • Client-Geheimnis : Clientgeheimnis der Azure AD-Anwendung
  • Auth-URL : OAuth-Autorisierungs-URL des Azure AD-Mandanten
  • Token-URL : OAuth-Token-URL des Azure AD-Mandanten
  • Mieter-ID : Azure AD-Verzeichnis-ID (Mandant)
  • Umfang : API-Bereich der Azure AD-Anwendung mit Anwendungs-ID-URL

Postman-Umgebungsvariablen

Abbildung 22: Postman-Umgebungsvariablen

Öffnen Sie eine neue Registerkarte in Postman und befolgen Sie diese Schritte:

  • Ändern Sie Ihre Umgebung oben rechts in ACM
  • Fügen Sie Ihre API-URL zur Adressleiste hinzu
  • Klicken Sie auf die Registerkarte Auth
  • Ändern Sie den Typ in OAuth 2.0
  • Scrollen Sie in der Auth-Konfiguration nach unten und legen Sie die folgenden Variablen fest:
    • Authentifizierungs-URL: {{auth_url}}
    • Zugriffstoken-URL: {{token_url}}
    • Kunden-ID: {{client_id}}
    • Client-Geheimnis: {{client_secret}}
  • Klicken Sie auf die Schaltfläche Neues Zugriffstoken abrufen

Postman-Anfrage

Abbildung 23: Postman-Anfrage

Postman-Authentifizierungskonfiguration

Abbildung 24: Postman-Authentifizierungskonfiguration

Es öffnet sich ein Browserfenster und Sie werden aufgefordert, sich mit Ihren Azure AD-Anmeldeinformationen anzumelden. Sobald Sie sich erfolgreich authentifiziert haben, werden Sie zurück zu Postman geleitet und das folgende Fenster wird angezeigt. Klicken Sie auf die Schaltfläche Token verwenden .

Postman-Nutzungstoken

Abbildung 25: Postman-Nutzungstoken

Da Sie nun über Ihr OAuth-Zugriffstoken verfügen, können Sie endlich Ihren API-Aufruf tätigen. Klicken Sie auf die Schaltfläche „Speichern“ und dann auf die Schaltfläche „Senden “.

Wenn alles richtig konfiguriert ist, sollte die Antwort „200 OK“ angezeigt werden.

Postman – Erfolgreiche Anforderung

Abbildung 26: Postman – Erfolgreiche Anforderung

Abschluss

Sie verfügen jetzt über den API Connectivity Manager, der Ihre APIs mithilfe von Azure AD OAuth-Zugriffstoken schützt. Die nächsten Schritte wären, zusätzliche OAuth-Bereiche hinzuzufügen und den API-Gateway-Cluster im API Connectivity Manager so zu konfigurieren, dass diese Bereiche an Ihre geschützten APIs übergeben 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 API Connectivity Manager und Instance Manager umfasst.

Eine Version dieses Beitrags erschien zuerst auf codygreen.com . Es wird hier mit Genehmigung des Autors bearbeitet und erneut abgedruckt.


„Dieser Blogbeitrag kann auf Produkte verweisen, die nicht mehr verfügbar und/oder nicht mehr unterstützt werden. Die aktuellsten Informationen zu verfügbaren F5 NGINX-Produkten und -Lösungen finden Sie in unserer NGINX-Produktfamilie . NGINX ist jetzt Teil von F5. Alle vorherigen NGINX.com-Links werden auf ähnliche NGINX-Inhalte auf F5.com umgeleitet."