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

Specify this plugin when creating the route and fill the required fields. Example:

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

The "authz-casdoor" plugin has four parameters.

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. For example, in this example, http://localhost:9080/anything/callback obviously belongs to "/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. The third and fourth parameters are "client_id" and "client_secret", obtained from Casdoor when registering an application.

Wie funktioniert es?

Suppose a new user who has never visited this route before is going to visit it (http://localhost:9080/anything/d?param1=foo&param2=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.

Next time this user wants to visit the URL behind this route (for example, http://localhost:9080/anything/d), after discovering that this user has been authenticated previously, this plugin won't redirect this user anymore. 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

Deploy Casdoor and APISIX. After deployment, ensure:

  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.

Application Setting Note Client ID and Client Secret for the next step. OIDC discovery: http://<CASDOOR_HOSTNAME>/.well-known/openid-configuration.

Schritt 3: APISIX konfigurieren

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

Customize settings per APISIX OIDC. Example routing:

# 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
}
}
}'

Visit http://APISIX_HOSTNAME/get; the browser redirects to the Casdoor login page. After login, the request is forwarded to httpbin.org as in the screenshot. APISIX_Ergebnis