APISIX
Actuellement, il existe 2 méthodes pour utiliser Casdoor pour se connecter à APISIX via les plugins APISIX et protéger les API derrière APISIX : en utilisant le plugin Casdoor d'APISIX ou le plugin OIDC d'APISIX.
Connectez Casdoor via le plugin Casdoor d'APISIX
Ce plugin, authz-casdoor, peut protéger les API derrière APISIX, en forçant chaque requête à être authentifiée sans modifier le code de l'API.
Comment l'activer
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
}
}
}'
Dans cet exemple, nous avons créé une route "/anything/*" pointant vers "httpbin.org:80" en utilisant l'API d'administration d'APISIX, avec le plugin "authz-casdoor" activé. Cette route est maintenant sous la protection d'authentification de Casdoor.
Attributs
| Nom | Type | Exigence | Défaut | Valide | Description |
|---|---|---|---|---|---|
| endpoint_addr | chaîne | requis | L'URL de Casdoor. | ||
| client_id | chaîne | requis | L'ID client dans Casdoor. | ||
| client_secret | chaîne | requis | Le secret client dans Casdoor. | ||
| callback_url | chaîne | requis | L'URL de rappel qui est utilisée pour recevoir l'état et le code. |
endpoint_addr et callback_url ne doivent pas se terminer par '/'
The "authz-casdoor" plugin has four parameters.
Le premier est "callback_url". Ceci est l'URL de rappel dans OAuth2. Il convient de souligner que cette URL de rappel doit appartenir à l'"uri" que vous avez spécifié pour la route. For example, in this example, http://localhost:9080/anything/callback obviously belongs to "/anything/*". Seulement de cette manière, la visite vers le callback_url peut être interceptée et utilisée par le plugin (afin que le plugin puisse obtenir le code et l'état dans OAuth2). La logique du callback_url est implémentée complètement par le plugin, donc il n'est pas nécessaire de modifier le serveur pour implémenter ce rappel.
Le deuxième paramètre "endpoint_addr" est évidemment l'URL de Casdoor. The third and fourth parameters are "client_id" and "client_secret", obtained from Casdoor when registering an application.
Comment ça fonctionne ?
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). Considérant que "authz-casdoor" est activé, cette visite sera d'abord traitée par le plugin "authz-casdoor". Après avoir vérifié la session et confirmé que cet utilisateur n'a pas été authentifié, la visite sera interceptée. Avec l'URL originale que l'utilisateur souhaite visiter conservée, il sera redirigé vers la page de connexion de Casdoor.
Après s'être connecté avec succès avec un nom d'utilisateur et un mot de passe (ou quelle que soit la méthode utilisée), Casdoor redirigera cet utilisateur vers le "callback_url" avec les paramètres GET "code" et "état" spécifiés. Comme le "callback_url" est connu par le plugin, lorsque la visite vers le "callback_url" est interceptée cette fois, la logique du "Authorization code Grant Flow" dans OAuth2 sera déclenchée. Cela signifie que le plugin demandera le jeton d'accès pour confirmer si cet utilisateur est vraiment connecté. Après cette confirmation, le plugin redirigera cet utilisateur vers l'URL originale qu'il souhaite visiter, qui a été conservée par nous précédemment. Le statut connecté sera également conservé dans la session.
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. De cette façon, l'utilisateur peut visiter ce qu'il veut sous cette route sans être perturbé.
Connectez Casdoor via le plugin OIDC d'APISIX
Casdoor peut utiliser le protocole OIDC pour se connecter à APISIX, et ce document vous montrera comment faire.
Voici quelques-uns des noms utilisés dans la configuration :
CASDOOR_HOSTNAME : Nom de domaine ou IP où le serveur Casdoor est déployé.
APISIX_HOSTNAME : Nom de domaine ou IP où APISIX est déployé.
Étape 1 : Déployer Casdoor et APISIX
Deploy Casdoor and APISIX. After deployment, ensure:
- Casdoor peut être connecté et utilisé normalement.
- Définissez la valeur
originde Casdoor (conf/app.conf) surCASDOOR_HOSTNAME.
Étape 2 : Configurer l'application Casdoor
- Créez une nouvelle application Casdoor ou utilisez-en une existante.
- Ajoutez une URL de redirection :
http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT, et remplacezREDIRECTWHATYOUWANTpar l'URL de redirection souhaitée. - Sélectionnez "JWT-Empty" pour l'option de format de jeton.
- Ajoutez le fournisseur souhaité et configurez les autres paramètres.
Note Client ID and Client Secret for the next step. OIDC discovery: http://<CASDOOR_HOSTNAME>/.well-known/openid-configuration.
Étape 3 : Configurer APISIX
APISIX a un support officiel d'OIDC, qui est implémenté en utilisant lua-resty-openidc.
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. 