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
Name | Typ | Anforderung | Standard | Gültig | Beschreibung |
---|---|---|---|---|---|
endpoint_addr | Zeichenkette | erforderlich | Die URL von Casdoor. | ||
client_id | Zeichenkette | erforderlich | Die Client-ID in Casdoor. | ||
client_secret | Zeichenkette | erforderlich | Das Client-Geheimnis in Casdoor. | ||
callback_url | Zeichenkette | erforderlich | Die 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=foo¶m2=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:
- Casdoor kann eingeloggt und normal verwendet werden.
- Setzen Sie den
origin
-Wert von Casdoor (conf/app.conf) aufCASDOOR_HOSTNAME
.
Schritt 2: Casdoor-Anwendung konfigurieren
- Erstellen Sie eine neue Casdoor-Anwendung oder verwenden Sie eine vorhandene.
- Fügen Sie eine Weiterleitungs-URL hinzu:
http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT
und ersetzen SieREDIRECTWHATYOUWANT
mit der gewünschten Weiterleitungs-URL. - Wählen Sie für die Tokenformatoption "JWT-Empty".
- Fügen Sie den gewünschten Anbieter hinzu und konfigurieren Sie andere Einstellungen.
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.