Verwendung von Apache APISIX und Authing zur Implementierung zentraler Authentifizierungsverwaltung
API7.ai
January 4, 2022
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.
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.
Vorteile des zentralen Authentifizierungsmodus
Im Vergleich zum traditionellen Authentifizierungsmodus bietet der zentrale Authentifizierungsmodus folgende Vorteile.
- Vereinfachung des Anwendungsentwicklungsprozesses, Reduzierung der Entwicklungsarbeit und Wartungskosten sowie Vermeidung der wiederholten Entwicklung von Authentifizierungslogik für jede Anwendung.
- 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.
- Lebenszyklusverwaltung von Authentifizierungsdiensten über die Konsole, einschließlich Erstellung, Aktivierung, Deaktivierung usw.
- Echtzeit- und visuelle Anwendungsüberwachung, einschließlich: Anzahl der Schnittstellenanfragen, Schnittstellenaufruflatenz und Schnittstellenfehlerinformationen sowie Echtzeit-Alarmbenachrichtigungen.
- 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
- 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.
- Klicken Sie auf "Create", um eine Authing-Anwendung zu erstellen.
- 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.
- 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).
- Besuchen Sie die Anwendungsseite für die folgende Konfiguration, die bei der Konfiguration von Apache APISIX OpenID Connect erforderlich ist.
- App ID: OAuth-Client-ID, d. h. die ID der Anwendung, entspricht
client_id
und{YOUR_CLIENT_ID}
unten. - App secret: OAuth-Client-Geheimnis, d. h. der Anwendungsschlüssel. Entspricht
client_secret
und{YOUR_CLIENT_SECRET}
unten. - Service_discovery_address: Die Adresse der Anwendungsdienstermittlung. Entspricht
{YOUR_DISCOVERY}
unten.
- App ID: OAuth-Client-ID, d. h. die ID der Anwendung, entspricht
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
- Erstellen Sie ein Verzeichnis namens
apisix-2.7
.
mkdir apisix-2.7
- 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.
- Entpacken Sie das Apache APISIX Release-Quellpaket.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
- 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
-
Führen Sie den folgenden Befehl aus, um Apache APISIX zu starten.
apisix start
-
Erstellen Sie Routen und konfigurieren Sie das OpenID Connect Plug-in. Die OpenID Connect-Konfigurationsliste ist wie folgt.
Feld | Standardwert | Beschreibung |
---|---|---|
client_id | N/A | OAuth-Client-ID |
client_secret | N/A | OAuth-Client-Geheimnis |
discovery | N/A | Dienstermittlungsendpunkte für Identitätsanbieter |
scope | openid | Benötigter Ressourcenbereich |
relm | apisix | Gibt die WWW-Authenticate-Antwortheader-Authentifizierungsinformationen an |
bearer_only | false | Ob das Token im Anfrageheader überprüft werden soll |
logout_path | /logout | Logout-URI |
redirect_uri | request_uri | Die URI, zu der der Identitätsanbieter zurückkehrt, standardmäßig die Anfrageadresse |
timeout | 3 | Anfrage-Timeout in Sekunden |
ssl_verify | false | Ob das SSL-Zertifikat des Identitätsanbieters überprüft werden soll |
introspection_endpoint | N/A | Die URL des Token-Authentifizierungsendpunkts des Identitätsanbieters, die aus der Discovery-Antwort extrahiert wird, wenn leer gelassen. |
introspection_endpoint_auth_method | client_secret_basic | Name der Authentifizierungsmethode für die Token-Introspektion |
public_key | N/A | Öffentlicher Schlüssel für das Authentifizierungstoken |
token_signing_alg_values_expected | N/A | Algorithmus für Authentifizierungstoken |
set_access_token_header | true | Ob das Zugriffstoken im Anfrageheader mitgeführt werden soll |
access_token_in_authorization_header | false | Das Zugriffstoken wird in den Authorization-Header gesetzt, wenn true, und in den X-Access-Token-Header, wenn false. |
set_id_token_header | false | Ob das ID-Token in den X-ID-Token-Anfrageheader mitgeführt werden soll |
set_userinfo_header | false | Ob 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
-
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).
-
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.
-
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 überaccess_token_in_authorization_header
in der Plug-in-Konfiguration.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-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.Wie Sie sehen können, trägt Apache APISIX die
X-Access-Token
-,X-Id-Token
- undX-Userinfo
-Anfrageheader an das Upstream. Das Upstream kann diese Header analysieren, um die Benutzer-ID-Informationen und die Benutzermetadaten zu erhalten. -
Im "Audit Log - User Behavior Log" in der Authing-Konsole können Sie die Anmeldeinformationen von user1 beobachten.
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.