Passer au contenu principal

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

Vous devez spécifier ce plugin lors de la création de la route et fournir tous les champs requis. Voici un exemple.

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

NomTypeExigenceDéfautValideDescription
endpoint_addrchaînerequisL'URL de Casdoor.
client_idchaînerequisL'ID client dans Casdoor.
client_secretchaînerequisLe secret client dans Casdoor.
callback_urlchaînerequisL'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 '/'

Dans la configuration du plugin "authz-casdoor", nous pouvons voir quatre paramètres.

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. Par exemple, dans cet exemple, http://localhost:9080/anything/callback appartient évidemment à "/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. Le troisième et le quatrième paramètres sont "client_id" et "client_secret", que vous pouvez obtenir de Casdoor lorsque vous enregistrez une application.

Comment ça fonctionne ?

Supposons qu'un nouvel utilisateur qui n'a jamais visité cette route auparavant va la visiter (http://localhost:9080/anything/d?param1=foom2=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.

La prochaine fois que cet utilisateur voudra visiter l'URL derrière cette route (par exemple, http://localhost:9080/anything/d), après avoir découvert que cet utilisateur a été authentifié précédemment, ce plugin ne redirigera plus cet utilisateur. 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

Tout d'abord, déployez Casdoor et APISIX.

Après un déploiement réussi, vous devez vous assurer :

  1. Casdoor peut être connecté et utilisé normalement.
  2. Définissez la valeur origin de Casdoor (conf/app.conf) sur CASDOOR_HOSTNAME. Casdoor conf

Étape 2 : Configurer l'application Casdoor

  1. Créez une nouvelle application Casdoor ou utilisez-en une existante.
  2. Ajoutez une URL de redirection : http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT, et remplacez REDIRECTWHATYOUWANT par l'URL de redirection souhaitée.
  3. Sélectionnez "JWT-Empty" pour l'option de format de jeton.
  4. Ajoutez le fournisseur souhaité et configurez les autres paramètres.

Paramétrage de l'application Sur la page des paramètres de l'application, vous trouverez les valeurs Client ID et Client Secret comme indiqué dans l'image ci-dessus. Nous les utiliserons à l'étape suivante.

Ouvrez votre navigateur préféré et visitez : http://CASDOOR_HOSTNAME/.well-known/openid-configuration, où vous trouverez la configuration OIDC de Casdoor.

Étape 3 : Configurer APISIX

APISIX a un support officiel d'OIDC, qui est implémenté en utilisant lua-resty-openidc.

Vous pouvez personnaliser les paramètres selon la documentation OIDC d'APISIX. Les paramètres de routage suivants seront utilisés :

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

Maintenant, visitez http://APISIX_HOSTNAME/get, et le navigateur vous redirigera vers la page de connexion de Casdoor. Après vous être connecté avec succès, vous verrez qu'une requête a été envoyée à httpbin.org comme le montre la capture d'écran ci-dessous. APISIX_Result