Forward-Auth, une autre option pour la fonction d'authentification
API7.ai
January 26, 2022
Forward Auth déplace intelligemment la logique d'authentification et d'autorisation vers un service externe dédié, où la passerelle transmet la demande de l'utilisateur au service d'authentification et bloque la demande originale, remplaçant le résultat lorsque le service d'authentification répond avec un statut non-20x. De cette manière, il est possible de retourner une erreur personnalisée ou de rediriger l'utilisateur vers la page d'authentification si l'authentification échoue.
Principe
Le principe et le flux du plugin forward-auth
dans Apache APISIX sont illustrés dans la figure ci-dessus et résumés dans les étapes suivantes.
- Étape 1 : Une demande est faite par le client à APISIX
- Étape 2 : APISIX fait une demande au service d'authentification configuré par l'utilisateur
- Étape 3 : Le service d'authentification répond (statut 2xx ou exception)
- Étape 4 : En fonction de la réponse du service d'authentification, APISIX décidera de transférer la demande en amont ou d'envoyer une réponse de rejet directement au client
Comment utiliser
Étape 1 : Configurer le service d'authentification
Supposons qu'il existe un service d'authentification auquel l'utilisateur envoie une demande avec un en-tête de demande Authorization. Si ces données passent l'authentification, un code de statut 200 et un en-tête de réponse nommé X-User-ID
sont retournés ; si elles ne passent pas l'authentification, le statut d'authentification est considéré comme expiré et un code de statut 302 et un en-tête de réponse Location
sont retournés pour rediriger le client vers la page de connexion.
Étape 2 : Créer une route et activer le plugin forward-auth
Ensuite, nous configurerons une route et activerons le plugin forward-auth
pour interfacer le service d'authentification ci-dessus avec l'application en amont.
curl http://127.0.0.1:9080/apisix/admin/routes/1 -H 'X-API-KEY: edd1c9f034335f136f87ad84b625c8f1' -X PUT -d '
{
"plugins": {
"forward-auth": {
"address": "http://127.0.0.1:9080/auth",
"request_headers": ["Authorization"],
"upstream_headers": ["X-User-ID"],
"client_headers": ["Location"]
}
},
"uri": "/user"
}'
Les détails de la configuration ci-dessus sont expliqués.
- Lorsqu'une demande correspond à la route actuelle, une demande est envoyée à l'adresse
address
avec l'en-tête de demande Authorization défini dansrequest_headers
(c'est-à-dire l'en-tête de demande configuré pour être transféré par le client au service d'authentification, s'il n'est pas défini, aucun en-tête de demande n'est transféré), ce qui permet au service d'authentification de confirmer l'identité de l'utilisateur. - Si l'authentification passe, le code de statut est 200 et retourne un
X-User-ID
tel que défini dansupstream_headers
(c'est-à-dire l'en-tête de demande à transférer en amont par le service d'authentification lorsque l'authentification passe, s'il n'est pas défini, aucun en-tête de demande n'est transféré). - Si l'authentification échoue, le code de statut est 302 et retourne un
Location
tel que défini dansclient_headers
(c'est-à-dire l'en-tête de réponse envoyé par le service d'authentification au client si l'authentification échoue, ou aucun en-tête de réponse s'il n'est pas défini).
Étape 3 : Tester les demandes
# Demande et envoi de données en utilisant POST
curl http://127.0.0.1:9080/user \
--header 'Authorization: true'
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 28
Server: APISIX/2.11.0
{"user_id":"i-am-real-user"}
# Demande en utilisant GET
curl -i http://127.0.0.1:9080/user \
--header 'Authorization: false'
HTTP/1.1 302 FOUND
Server: APISIX/2.11.0
Location: https://example.com/auth
Annexe : Désactiver le plugin
Si vous avez terminé d'utiliser le plugin Forward Auth, il suffit de supprimer la configuration du plugin forward-auth
de la configuration de la route et de l'enregistrer pour désactiver le plugin Forward Auth sur la route.
Grâce à la nature dynamique d'Apache APISIX, il n'est pas nécessaire de redémarrer Apache APISIX pour activer ou désactiver le plugin.
Résumé
Pour obtenir plus d'informations sur la description du plugin forward-auth
et la liste complète des configurations, vous pouvez consulter la documentation officielle. De plus, si vous avez des scénarios d'application d'authentification ou d'autorisation plus complexes, essayez d'utiliser le plugin opa
, qui permet des fonctionnalités plus puissantes de manière programmable.
Apache APISIX travaille également actuellement sur des plugins supplémentaires pour prendre en charge l'intégration de services supplémentaires, donc si vous êtes intéressé, n'hésitez pas à démarrer une discussion dans GitHub Discussion, ou via la liste de diffusion pour communiquer.