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
| 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
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¶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.
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:
- 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/REDIRECTWHATYOUWANTund ersetzen SieREDIRECTWHATYOUWANTmit 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.
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. 