Zum Hauptinhalt springen

APISIX

Derzeit gibt es 2 Methoden, um Casdoor zu verwenden, um sich über APISIX-Plugins mit APISIX zu verbinden und die APIs hinter APISIX zu schützen: Verwendung des Casdoor-Plugins von APISIX oder Verwendung des OIDC-Plugins von APISIX.

Verbinden Sie Casdoor über das Casdoor-Plugin von APISIX

Dieses Plugin, authz-casdoor, kann APIs hinter APISIX schützen, indem es jede einzelne Anfrage authentifiziert, ohne den Code der API zu ändern.

Wie man es aktiviert

Sie müssen dieses Plugin angeben, wenn Sie die Route erstellen und alle erforderlichen Felder bereitstellen. Hier ist ein Beispiel.

curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"methods": ["GET"],
"uri": "/anything/*",
"plugins": {
"authz-casdoor": {
"endpoint_addr":"http://localhost:8000",
"callback_url":"http://localhost:9080/anything/callback",
"client_id":"7ceb9b7fda4a9061ec1c",
"client_secret":"3416238e1edf915eac08b8fe345b2b95cdba7e04"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

In diesem Beispiel haben wir eine Route "/anything/*" erstellt, die auf "httpbin.org:80" zeigt, indem wir die Admin-API von APISIX verwenden, mit dem aktivierten "authz-casdoor"-Plugin. Diese Route steht nun unter dem Authentifizierungsschutz von Casdoor.

Attribute

NameTypAnforderungStandardGültigBeschreibung
endpoint_addrZeichenketteerforderlichDie URL von Casdoor.
client_idZeichenketteerforderlichDie Client-ID in Casdoor.
client_secretZeichenketteerforderlichDas Client-Geheimnis in Casdoor.
callback_urlZeichenketteerforderlichDie Callback-URL, die verwendet wird, um Zustand und Code zu empfangen.

endpoint_addr und callback_url sollten nicht mit '/' enden

In der Konfiguration des "authz-casdoor"-Plugins können wir vier Parameter sehen.

Das erste ist "callback_url". Dies ist die Callback-URL in OAuth2. Es sollte betont werden, dass diese Callback-URL zur "uri" gehören muss, die Sie für die Route angegeben haben. Zum Beispiel gehört in diesem Beispiel http://localhost:9080/anything/callback offensichtlich zu "/anything/*". Nur auf diese Weise kann der Besuch der callback_url vom Plugin abgefangen und genutzt werden (damit das Plugin den Code und den Zustand in OAuth2 erhalten kann). Die Logik der callback_url wird vollständig vom Plugin implementiert, daher ist es nicht notwendig, den Server zu ändern, um diese Callback-Funktion zu implementieren.

Der zweite Parameter "endpoint_addr" ist offensichtlich die URL von Casdoor. Der dritte und vierte Parameter sind "client_id" und "client_secret", die Sie von Casdoor erhalten können, wenn Sie eine App registrieren.

Wie funktioniert es?

Nehmen wir an, ein neuer Benutzer, der diese Route zuvor noch nie besucht hat, wird sie besuchen (http://localhost:9080/anything/d?param1=foom2=bar). Da das "authz-casdoor" aktiviert ist, wird dieser Besuch zuerst vom "authz-casdoor"-Plugin verarbeitet. Nachdem die Sitzung überprüft und bestätigt wurde, dass dieser Benutzer noch nicht authentifiziert wurde, wird der Besuch abgefangen. Mit der ursprünglichen URL, die der Benutzer besuchen möchte, wird er zur Anmeldeseite von Casdoor weitergeleitet.

Nachdem er sich erfolgreich mit einem Benutzernamen und Passwort (oder welcher Methode auch immer) angemeldet hat, wird Casdoor diesen Benutzer mit den GET-Parametern "code" und "state" zur "callback_url" weiterleiten. Da die "callback_url" dem Plugin bekannt ist, wird beim diesmaligen Abfangen des Besuchs der "callback_url" die Logik des "Authorization code Grant Flow" in OAuth2 ausgelöst. Das bedeutet, dass das Plugin das Zugriffstoken anfordern wird, um zu bestätigen, ob dieser Benutzer wirklich eingeloggt ist. Nach dieser Bestätigung wird das Plugin diesen Benutzer zur ursprünglichen URL weiterleiten, die er besuchen wollte und die wir zuvor gespeichert haben. Der eingeloggte Status wird auch in der Sitzung gespeichert.

Wenn dieser Benutzer das nächste Mal die URL hinter dieser Route besuchen möchte (zum Beispiel http://localhost:9080/anything/d), wird dieses Plugin ihn nicht mehr weiterleiten, nachdem festgestellt wurde, dass dieser Benutzer zuvor bereits authentifiziert wurde. Auf diese Weise kann der Benutzer alles unter dieser Route besuchen, ohne gestört zu werden.

Verbinden Sie Casdoor über das OIDC-Plugin von APISIX

Casdoor kann das OIDC-Protokoll verwenden, um sich mit APISIX zu verbinden, und dieses Dokument zeigt Ihnen, wie es geht.

Die folgenden sind einige der Namen, die in der Konfiguration verwendet werden:

CASDOOR_HOSTNAME: Domainname oder IP, wo der Casdoor-Server bereitgestellt ist.

APISIX_HOSTNAME: Domainname oder IP, wo APISIX bereitgestellt ist.

Schritt 1: Casdoor und APISIX bereitstellen

Zuerst Casdoor und APISIX bereitstellen.

Nach einer erfolgreichen Bereitstellung müssen Sie sicherstellen:

  1. Casdoor kann eingeloggt und normal verwendet werden.
  2. Setzen Sie den origin-Wert von Casdoor (conf/app.conf) auf CASDOOR_HOSTNAME. Casdoor-Konfiguration

Schritt 2: Casdoor-Anwendung konfigurieren

  1. Erstellen Sie eine neue Casdoor-Anwendung oder verwenden Sie eine vorhandene.
  2. Fügen Sie eine Weiterleitungs-URL hinzu: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT und ersetzen Sie REDIRECTWHATYOUWANT mit der gewünschten Weiterleitungs-URL.
  3. Wählen Sie für die Tokenformatoption "JWT-Empty".
  4. Fügen Sie den gewünschten Anbieter hinzu und konfigurieren Sie andere Einstellungen.

Anwendungseinstellung Auf der Seite der Anwendungseinstellungen finden Sie die Werte Client ID und Client Secret, wie im Bild oben gezeigt. Wir werden sie im nächsten Schritt verwenden.

Öffnen Sie Ihren bevorzugten Browser und besuchen Sie: http://CASDOOR_HOSTNAME/.well-known/openid-configuration, wo Sie die OIDC-Konfiguration von Casdoor finden werden.

Schritt 3: APISIX konfigurieren

APISIX hat offizielle OIDC-Unterstützung, die mit lua-resty-openidc implementiert wird.

Sie können die Einstellungen gemäß der APISIX OIDC-Dokumentation anpassen. Die folgenden Routing-Einstellungen werden verwendet:

# Use your own X-Api-Key
$ curl -X POST APISIX_HOSTNAME/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri": "/get",
"name": "apisix_casdoor_test",
"plugins": {
"openid-connect": {
"client_id": "Client ID",
"client_secret": "Client Secret",
"discovery": "http://CASDOOR_HOSTNAME/.well-known/openid-configuration",
"introspection_endpoint_auth_method": "client_secret_basic",
"logout_path": "/logout",
"realm": "master",
"redirect_uri": "http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT",
"bearer_only": false,
"set_id_token_header": false,
"access_token_in_authorization_header": true,
"set_access_token_header": true,
"set_userinfo_header": false,
"realm": "master"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

Besuchen Sie jetzt http://APISIX_HOSTNAME/get, und der Browser wird Sie zur Casdoor-Anmeldeseite weiterleiten. Nachdem Sie sich erfolgreich angemeldet haben, werden Sie sehen, dass eine Anfrage an httpbin.org gesendet wurde, wie im Screenshot unten gezeigt. APISIX_Ergebnis