Verwendung des Apache APISIX OpenID Connect Plugins für zentralisierte Identitätsauthentifizierung

API7.ai

September 7, 2021

Ecosystem

Die Verwendung des Apache APISIX OpenID Connect-Plugins zur Konfiguration der Okta-Authentifizierung ist ein einfacher dreistufiger Prozess. Es ermöglicht Ihnen, vom traditionellen Authentifizierungsmodus auf den zentralisierten Identitätsauthentifizierungsmodus umzusteigen. Die folgenden Abschnitte beschreiben die Schritte zur Konfiguration der Okta-Authentifizierung mit dem OpenID Connect-Plugin für Apache APISIX.

Der zentralisierte Identitätsauthentifizierungsmodus bietet im Vergleich zum traditionellen Authentifizierungsmodus folgende Vorteile:

  1. Die zentralisierte Identitätsauthentifizierung vereinfacht den Anwendungsentwicklungsprozess.
  2. Die zentralisierte Identitätsauthentifizierung verbessert die Geschäftssicherheit.

Voraussetzung

Ein Okta-Konto muss bereitgestellt werden.

Schritt 1: Konfiguration von Okta

  1. Melden Sie sich bei Ihrem Okta-Konto an und klicken Sie auf "Create App Integration", um eine Okta-Anwendung zu erstellen. Create App Integration
  2. Wählen Sie "OIDC- OpenID Connect" als Anmeldemethode und "Web Application" als Anwendungstyp. Create a new App Integration
  3. Legen Sie die Umleitungs-URLs für Anmeldung und Abmeldung fest. Die "Sign-in redirect URIs" sind die Links, die nach einer erfolgreichen Anmeldung umgeleitet werden dürfen, und die "Sign-out redirect URIs" sind die Links, die nach einer erfolgreichen Abmeldung umgeleitet werden. In diesem Beispiel setzen wir sowohl die Anmelde- als auch die Abmelde-URLs auf http://127.0.0.1:9080/. Set the redirect URL for login and logout
  4. Nach Abschluss der Einstellungen klicken Sie auf "Save", um die Änderungen zu speichern. save the changes
  5. Besuchen Sie die Allgemeine Seite der Anwendung, um die folgenden Konfigurationen zu erhalten, die zur Konfiguration von Apache APISIX OpenID Connect erforderlich sind.
  • Client ID: Die Anwendungs-ID, die dem unten stehenden client_id entspricht.
  • Client secret: Der Anwendungsschlüssel, der dem unten stehenden client_secret entspricht.
  • Okta domain: Der von der Anwendung verwendete Domainname, der dem unten stehenden {ISSUER} entspricht.

obtain configuration

Schritt 2: Installation von Apache APISIX

Installation der Abhängigkeiten

Die Apache APISIX-Laufzeitumgebung benötigt 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 Installationsanleitungen für die Abhängigkeiten für CentOS7, Fedora 31 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10 und MacOS an. 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: Installation von Apache APISIX mit Docker.

Installation über Helm Chart

Bitte lesen Sie: Installation von Apache APISIX mit Helm Chart.

Installation über Source Release

  1. Erstellen Sie ein Verzeichnis namens apisix-2.7.

    mkdir apisix-2.7
    
  2. 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 Offizielle Website - Download-Seite bietet auch Quellpakete für Apache APISIX, APISIX Dashboard und APISIX Ingress Controller.

  3. Entpacken Sie das Apache APISIX Release-Quellpaket.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
    
  4. Installieren Sie die Laufzeitabhängigen 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.

# Initialisieren Sie die NGINX-Konfigurationsdatei und etcd
make init

Schritt 3: Starten Sie Apache APISIX und konfigurieren Sie die entsprechende Route

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

    apisix start
    
  2. Erstellen Sie eine Route und konfigurieren Sie das OpenID Connect-Plugin. Das folgende Codebeispiel erstellt eine Route über die Apache APISIX Admin API, wobei der Upstream-Pfad auf httpbin.org gesetzt wird, einen einfachen Backend-Service zum Empfangen und Beantworten von Anfragen. Im Folgenden wird die get-Seite von httpbin.org verwendet. Weitere Informationen finden Sie unter http bin get. Für spezifische Konfigurationselemente lesen Sie bitte das Apache APISIX OpenID Connect Plugin.

Die OpenID Connect-Konfigurationsfelder sind unten aufgeführt:

FeldStandardwertBeschreibung
client_id""OAuth-Client-ID.
client_secret""OAuth-Client-Geheimnis.
discovery""Service Discovery-Endpunkte für Identitätsanbieter.
scopeopenidUmfang der zu zugreifenden Ressourcen.
relmapisixGibt die WWW-Authenticate-Antwortheader-Authentifizierungsinformationen an.
bearer_onlyfalseOb das Token im Anfrageheader überprüft werden soll.
logout_path/logoutAbmelde-URI.
redirect_urirequest_uriDie URI, zu der der Identitätsanbieter zurückleitet, standardmäßig die Anfrageadresse.
timeout3Anfrage-Timeout-Zeit, die Einheit ist in Sekunden definiert.
ssl_verifyfalseÜberprüfen Sie das SSL-Zertifikat des Identitätsanbieters.
introspection_endpoint""Die URL des Token-Authentifizierungsendpunkts des Identitätsanbieters, die aus der Discovery-Antwort extrahiert wird, wenn sie leer gelassen wird.
introspection_endpoint_auth_methodclient_secret_basicName der Authentifizierungsmethode für die Token-Introspektion.
public_key""Öffentlicher Schlüssel für ein Authentifizierungstoken.
token_signing_alg_values_expected""Algorithmus für Authentifizierungstoken.
set_access_token_headertrueOb das Zugriffstoken im Anfrageheader mitgeführt werden soll.
access_token_in_authorization_headerfalseOb ein Zugriffstoken in den Authorization-Header gesetzt werden soll. Das Zugriffstoken wird in den Authorization-Header gesetzt, wenn dieser Wert auf true gesetzt ist, und in den X-Access-Token-Header, wenn er auf false gesetzt ist.
set_id_token_headertrueOb das ID-Token im X-ID-Token-Anfrageheader mitgeführt werden soll.
set_userinfo_headertrueOb Benutzerinformationen im X-Userinfo-Anfrageheader mitgeführt werden sollen.
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_ISSUER}/.well-known/openid-configuration",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"master",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Überprüfung

  1. Besuchen Sie "http://127.0.0.1:9080/get" und die Seite wird auf die Okta-Anmeldeseite umgeleitet, da das OpenID Connect-Plugin aktiviert ist. visit Okta login page

  2. Geben Sie den Benutzernamen und das Passwort für das Okta-Konto des Benutzers ein und klicken Sie auf "Sign In", um sich bei Ihrem Okta-Konto anzumelden.

  3. Nach erfolgreicher Anmeldung können Sie die get-Seite in "httpbin.org" aufrufen. Die Seite "httpbin.org/get" gibt die angeforderten Daten mit X-Access-Token, X-Id-Token und X-Userinfo wie folgt zurück.

    "X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****",
    "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****",
    "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
    

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

X-Access-Token

X-Id-Token: Apache APISIX erhält das Id-Token vom Benutzeranbieter durch die Base64-Kodierung in den X-Id-Token-Anfrageheader. Sie können diese Funktion über das set_id_token_header in der Plugin-Konfiguration aktivieren oder deaktivieren, standardmäßig ist sie aktiviert.

X-Id-Token

X-Userinfo: Apache APISIX erhält die Benutzerinformationen vom Benutzeranbieter und platziert sie nach der Base64-Kodierung in X-Userinfo. Sie können diese Funktion über das set_userinfo_header in der Plugin-Konfiguration aktivieren oder deaktivieren, standardmäßig ist sie aktiviert.

X-Userinfo

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

Wir haben den Prozess der Erstellung einer zentralisierten Identitätsauthentifizierung von Okta direkt in das Apache APISIX-Gateway gezeigt. Es ist einfach, sich für ein kostenloses Okta-Entwicklerkonto zu registrieren, um loszulegen. Unser Ansatz reduziert den Entwicklungsaufwand und ermöglicht eine sichere und effiziente Erfahrung.

Über Okta

Okta ist eine anpassbare, sichere und sofort einsatzbereite Lösung, um Authentifizierungs- und Autorisierungsdienste zu Ihren Anwendungen hinzuzufügen. Erhalten Sie skalierbare Authentifizierung, die direkt in Ihre Anwendung integriert ist, ohne den Entwicklungsaufwand, die Sicherheitsrisiken und die Wartung, die mit der eigenen Programmierung verbunden sind. Sie können jede Anwendung in jeder Sprache oder auf jedem Stack mit Okta verbinden und definieren, wie sich Ihre Benutzer anmelden sollen. Jedes Mal, wenn ein Benutzer versucht, sich zu authentifizieren, überprüft Okta seine Identität und sendet die erforderlichen Informationen zurück an Ihre App.

Über Apache APISIX

Apache APISIX ist ein dynamisches, Echtzeit-, Hochleistungs-API-Gateway. Apache APISIX bietet umfangreiche Traffic-Management-Funktionen wie Lastenausgleich, dynamischen Upstream, Canary-Release, Circuit Breaking, Authentifizierung, Observability und mehr. Sie können Apache APISIX verwenden, um traditionellen Nord-Süd-Traffic sowie Ost-West-Traffic zwischen Diensten zu verarbeiten. Es kann auch als k8s Ingress Controller verwendet werden.

Hunderte von Unternehmen weltweit haben Apache APISIX verwendet, darunter Finanzen, Internet, Fertigung, Einzelhandel, Betreiber wie NASA, die Europäische Union’s Digital Factory, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360 usw.

Github: https://github.com/apache/apisix

Website: https://apisix.apache.org

Share article link