Verwendung von Apache APISIX und Authing zur Implementierung zentraler Authentifizierungsverwaltung

API7.ai

January 4, 2022

Ecosystem

Einführung

Über Apache APISIX

Apache APISIX ist ein dynamisches, Echtzeit-, Hochleistungs-API-Gateway, das umfangreiche Traffic-Management-Funktionen wie Lastenausgleich, dynamisches Upstream, Canary-Release, Service-Meltdown, Authentifizierung, Beobachtbarkeit usw. bietet. Apache APISIX unterstützt nicht nur dynamische Plug-in-Änderungen und Hot-Plugging, sondern verfügt auch über eine Reihe nützlicher Plug-ins. Das OpenID Connect Plug-in für Apache APISIX ermöglicht es Benutzern, Apache APISIX mit Authing-Diensten zu verbinden und als zentrales Authentifizierungsgateway im Unternehmen einzusetzen.

Über Authing

Authing ist das erste in China entwickelte, entwicklerzentrierte Full-Scene-Identity-Cloud-Produkt, das alle gängigen Identitätsprotokolle integriert und Unternehmen und Entwicklern vollständige und sichere Benutzerauthentifizierungs- und Zugriffsverwaltungsdienste bietet. Mit "API First" als Grundlage des Produkts werden alle gängigen Funktionen im Bereich der Identität modular gekapselt, und alle Fähigkeiten werden Entwicklern über ein Full-Scene-Programmiersprachen-SDK bereitgestellt. Gleichzeitig können Benutzer die offenen RESTful-APIs von Authing flexibel für Funktionserweiterungen nutzen, um die Identitätsverwaltungsanforderungen verschiedener Unternehmen in unterschiedlichen Geschäftsszenarien zu erfüllen.

Was ist zentrale Authentifizierung?

Traditioneller Authentifizierungsmodus

Im traditionellen Authentifizierungsmodus muss jeder Backend-Anwendungsdienst separate Funktionen entwickeln, um die Authentifizierungsfunktion zu unterstützen, wie z. B. die Interaktion mit dem Identitätsanbieter und das Abrufen der Benutzeridentitätsinformationen.

Traditioneller Authentifizierungsablauf

Zentraler Authentifizierungsmodus

Im Gegensatz zum traditionellen Authentifizierungsmodus wird beim zentralen Authentifizierungsmodus die Benutzerauthentifizierung aus dem Anwendungsdienst herausgenommen. Am Beispiel von Apache APISIX ist der Prozess der zentralen Authentifizierung wie folgt: Zuerst initiiert der Benutzer eine Anfrage, dann ist das Frontend-Gateway für den Benutzerauthentifizierungsprozess verantwortlich, interagiert mit dem Identitätsanbieter und sendet eine Autorisierungsanfrage an den Identitätsanbieter. Der Identitätsanbieter gibt die Benutzerinformationen zurück. Nachdem das Gateway die Benutzeridentifikation abgeschlossen hat, leitet es die Benutzeridentitätsinformationen in Form eines Anfrageheaders an die Backend-Anwendung weiter.

Zentraler Authentifizierungsablauf

Vorteile des zentralen Authentifizierungsmodus

Im Vergleich zum traditionellen Authentifizierungsmodus bietet der zentrale Authentifizierungsmodus folgende Vorteile.

  1. Vereinfachung des Anwendungsentwicklungsprozesses, Reduzierung der Entwicklungsarbeit und Wartungskosten sowie Vermeidung der wiederholten Entwicklung von Authentifizierungslogik für jede Anwendung.
  2. Verbesserung der Geschäftssicherheit, da der zentrale Authentifizierungsmodus auf Gateway-Ebene nicht authentifizierte Anfragen rechtzeitig abfangen kann, um Backend-Anwendungen zu schützen.

Gleichzeitig können in Kombination mit den leistungsstarken Authentifizierungsverwaltungsfunktionen von Authing folgende Funktionen erreicht werden.

  1. Lebenszyklusverwaltung von Authentifizierungsdiensten über die Konsole, einschließlich Erstellung, Aktivierung, Deaktivierung usw.
  2. Echtzeit- und visuelle Anwendungsüberwachung, einschließlich: Anzahl der Schnittstellenanfragen, Schnittstellenaufruflatenz und Schnittstellenfehlerinformationen sowie Echtzeit-Alarmbenachrichtigungen.
  3. Zentrale Protokollierung, um Benutzeranmeldungen, -abmeldungen und Informationen über Anpassungen und Änderungen an der Anwendung leicht einzusehen.

Weitere Details finden Sie unter Authing Access Gateway.

Implementierung der zentralen Authentifizierung mit Apache APISIX und Authing

Schritt 1: Konfiguration von Authing

  1. Melden Sie sich bei Ihrem Authing-Konto an, wählen Sie "Build your own app" und füllen Sie den App-Namen und die Authentifizierungsadresse aus. Wenn Sie kein Authing-Konto haben, besuchen Sie Authing, klicken Sie oben rechts auf "Login/Register", um ein Authing-Konto zu registrieren. Authing konfigurieren
  2. Klicken Sie auf "Create", um eine Authing-Anwendung zu erstellen. Authing-Anwendung erstellen
  3. Während des Authentifizierungsprozesses lehnt Authing Rückruf-URLs ab, die nicht den konfigurierten entsprechen. Da dies ein lokaler Test ist, sind die Login-Rückruf-URL und die Logout-Rückruf-URL beide auf die APISIX-Zugriffsadresse http://127.0.0.1:9080/ gesetzt. URL für Login und Logout festlegen
  4. Benutzer erstellen (optional). Auf der Benutzerlistenseite erstellen Sie einen Benutzer mit dem Konto-Passwort user1/user1, und Sie können auf der Seite "Benutzerinformationen - Autorisierungsverwaltung" festlegen, ob der Zugriff auf die Anwendung erlaubt ist (standardmäßig erlaubt). Benutzer erstellen
  5. Besuchen Sie die Anwendungsseite für die folgende Konfiguration, die bei der Konfiguration von Apache APISIX OpenID Connect erforderlich ist.
    1. App ID: OAuth-Client-ID, d. h. die ID der Anwendung, entspricht client_id und {YOUR_CLIENT_ID} unten.
    2. App secret: OAuth-Client-Geheimnis, d. h. der Anwendungsschlüssel. Entspricht client_secret und {YOUR_CLIENT_SECRET} unten.
    3. Service_discovery_address: Die Adresse der Anwendungsdienstermittlung. Entspricht {YOUR_DISCOVERY} unten. Konfigurationen

Schritt 2: Installation von Apache APISIX

Apache APISIX kann auf verschiedene Arten installiert werden, einschließlich Quellpaketen, Docker, Helm Chart usw.

Abhängigkeiten installieren

Die Laufzeitumgebung von Apache APISIX erfordert Abhängigkeiten von NGINX und etcd.

Bevor Sie Apache APISIX installieren, installieren Sie bitte die Abhängigkeiten gemäß dem von Ihnen verwendeten Betriebssystem. Wir bieten Installationsanweisungen für die Abhängigkeiten für CentOS7, Fedora 31 und 32, Ubuntu 16.04 und 18.04, Debian 9 und 10 sowie macOS. Weitere Details finden Sie unter Install Dependencies.

Installation über RPM-Paket (CentOS 7)

Diese Installationsmethode ist für CentOS 7 geeignet; führen Sie den folgenden Befehl aus, um Apache APISIX zu installieren.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Installation über Docker

Bitte lesen Sie Installing Apache APISIX with Docker.

Installation über Helm Chart

Bitte lesen Sie Installing Apache APISIX with Helm Chart.

Installation über Quellpaket

  1. Erstellen Sie ein Verzeichnis namens apisix-2.7.
mkdir apisix-2.7
  1. Laden Sie das Apache APISIX Release-Quellpaket herunter.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

Sie können das Apache APISIX Release-Quellpaket auch von der Apache APISIX-Website herunterladen. Die Apache APISIX Official Website - Download Page bietet auch Quellpakete für Apache APISIX, APISIX Dashboard und APISIX Ingress Controller.

  1. Entpacken Sie das Apache APISIX Release-Quellpaket.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. Installieren Sie die Laufzeitabhängigkeiten der Lua-Bibliotheken.
# Wechseln Sie in das Verzeichnis apisix-2.7
cd apisix-2.7
# Erstellen Sie die Abhängigkeiten
make deps

Initialisierung der Abhängigkeiten

Führen Sie den folgenden Befehl aus, um die NGINX-Konfigurationsdatei und etcd zu initialisieren.

# NGINX-Konfigurationsdatei und etcd initialisieren
make init

Schritt 3: Starten von Apache APISIX und Konfiguration der Route

  1. Führen Sie den folgenden Befehl aus, um Apache APISIX zu starten.

    apisix start
    
  2. Erstellen Sie Routen und konfigurieren Sie das OpenID Connect Plug-in. Die OpenID Connect-Konfigurationsliste ist wie folgt.

FeldStandardwertBeschreibung
client_idN/AOAuth-Client-ID
client_secretN/AOAuth-Client-Geheimnis
discoveryN/ADienstermittlungsendpunkte für Identitätsanbieter
scopeopenidBenötigter Ressourcenbereich
relmapisixGibt die WWW-Authenticate-Antwortheader-Authentifizierungsinformationen an
bearer_onlyfalseOb das Token im Anfrageheader überprüft werden soll
logout_path/logoutLogout-URI
redirect_urirequest_uriDie URI, zu der der Identitätsanbieter zurückkehrt, standardmäßig die Anfrageadresse
timeout3Anfrage-Timeout in Sekunden
ssl_verifyfalseOb das SSL-Zertifikat des Identitätsanbieters überprüft werden soll
introspection_endpointN/ADie URL des Token-Authentifizierungsendpunkts des Identitätsanbieters, die aus der Discovery-Antwort extrahiert wird, wenn leer gelassen.
introspection_endpoint_auth_methodclient_secret_basicName der Authentifizierungsmethode für die Token-Introspektion
public_keyN/AÖffentlicher Schlüssel für das Authentifizierungstoken
token_signing_alg_values_expectedN/AAlgorithmus für Authentifizierungstoken
set_access_token_headertrueOb das Zugriffstoken im Anfrageheader mitgeführt werden soll
access_token_in_authorization_headerfalseDas Zugriffstoken wird in den Authorization-Header gesetzt, wenn true, und in den X-Access-Token-Header, wenn false.
set_id_token_headerfalseOb das ID-Token in den X-ID-Token-Anfrageheader mitgeführt werden soll
set_userinfo_headerfalseOb Benutzerinformationen in den X-Userinfo-Anfrageheader mitgeführt werden sollen

Das folgende Codebeispiel erstellt eine Route über die Apache APISIX Admin API und setzt das Route-Upstream auf httpbin.org. httpbin.org ist ein einfacher Backend-Dienst zum Empfangen und Beantworten von Anfragen, die get-Seite von httpbin.org wird unten verwendet, siehe http bin get.

Für spezifische Konfigurationsdetails siehe Apache APISIX OpenID Connect Plugin.

curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_DISCOVERY}",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"apisix",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Schritt 4: Zugriff auf Apache APISIX

  1. Besuchen Sie "http://127.0.0.1:9080/get" und die Seite wird auf die Authing-Login-Seite umgeleitet, da das OpenID Connect Plug-in bereits aktiviert ist (diese Seite kann in der Authing-Konsole unter "Applications - Branding" angepasst werden). Zugriff auf Apache APISIX

  2. Geben Sie das Passwort für das bei Authing registrierte Benutzerkonto oder den in Schritt 1 erstellten Benutzer user1/user1 ein und klicken Sie auf Login, um sich bei Authing anzumelden.

  3. Nach erfolgreicher Anmeldung können Sie erfolgreich auf die get-Seite in httpbin.org zugreifen. Die httpbin.org/get-Seite gibt die angeforderten Daten wie folgt zurück.

    ...
    "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
    "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
    "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
    ...
    

    X-Access-Token: Apache APISIX fügt das vom Benutzeranbieter erhaltene Zugriffstoken in den X-Access-Token-Anfrageheader ein, optional in den Authorization-Anfrageheader über access_token_in_authorization_header in der Plug-in-Konfiguration.

    X-Access-Token

    X-Id-Token: Apache APISIX fügt das vom Benutzeranbieter erhaltene ID-Token nach Base64-Kodierung in den X-Id-Token-Anfrageheader ein, was über set_id_token_header in der Plug-in-Konfiguration aktiviert oder deaktiviert werden kann.

    X-Id-Token

    X-Userinfo: Apache APISIX fügt die vom Benutzeranbieter erhaltenen Benutzerinformationen nach Base64-Kodierung in X-Userinfo ein. Sie können diese Funktion über set_userinfo_header in der Plug-in-Konfiguration aktivieren oder deaktivieren.

    X-Userinfo

    Wie Sie sehen können, trägt Apache APISIX die X-Access-Token-, X-Id-Token- und X-Userinfo-Anfrageheader an das Upstream. Das Upstream kann diese Header analysieren, um die Benutzer-ID-Informationen und die Benutzermetadaten zu erhalten.

  4. Im "Audit Log - User Behavior Log" in der Authing-Konsole können Sie die Anmeldeinformationen von user1 beobachten. Anmeldeinformationen

Zusammenfassung

Dieser Artikel beschreibt die detaillierten Schritte zur Verbindung von Apache APISIX mit Authing.

Apache APISIX ist nicht nur bestrebt, seine eigene hohe Leistung aufrechtzuerhalten, sondern legt auch großen Wert auf den Aufbau eines Open-Source-Ökosystems. Derzeit verfügt Apache APISIX über 10+ Authentifizierungs- und Autorisierungs-Plug-ins, die die Verbindung mit gängigen Authentifizierungs- und Autorisierungsdiensten in der Branche unterstützen.

Wenn Sie eine Verbindung zu anderen Authentifizierungsbehörden herstellen müssen, besuchen Sie das GitHub von Apache APISIX und hinterlassen Sie Ihre Vorschläge über ein Issue; oder abonnieren Sie die Mailingliste von Apache APISIX, um Ihre Gedanken per E-Mail zu äußern.

Tags: