Utiliser Apache APISIX et Authing pour mettre en œuvre une gestion centralisée de l'authentification

API7.ai

January 4, 2022

Ecosystem

Introduction

À propos d'Apache APISIX

Apache APISIX est une passerelle API dynamique, en temps réel et haute performance qui offre des fonctionnalités riches de gestion du trafic telles que l'équilibrage de charge, le routage dynamique, les déploiements canaris, la gestion des pannes de service, l'authentification, l'observabilité, etc. Apache APISIX prend en charge non seulement les changements dynamiques de plugins et le branchement à chaud, mais dispose également de nombreux plugins utiles. Le plugin OpenID Connect pour Apache APISIX, avec son support du protocole OpenID Connect, permet aux utilisateurs d'utiliser ce plugin pour permettre à Apache APISIX d'interagir avec les services Authing et d'être déployé comme une passerelle d'authentification centralisée dans l'entreprise.

À propos d'Authing

Authing est le premier produit cloud d'identité centré sur les développeurs en Chine, intégrant tous les protocoles d'identité mainstream et fournissant des services complets et sécurisés de gestion de l'authentification et de l'accès pour les entreprises et les développeurs. Avec "API First" comme pierre angulaire du produit, toutes les fonctions courantes dans le domaine de l'identité sont encapsulées de manière modulaire, et toutes les capacités sont exposées aux développeurs via un SDK en langage de programmation full-scene. Parallèlement, les utilisateurs peuvent utiliser de manière flexible les API RESTful ouvertes d'Authing pour étendre les fonctionnalités afin de répondre aux besoins de gestion de l'identité des différentes entreprises dans différents scénarios métiers.

Qu'est-ce que l'authentification centralisée

Mode d'authentification traditionnel

Dans le mode d'authentification traditionnel, chaque service d'application back-end doit développer des fonctions séparées pour prendre en charge la fonction d'authentification, comme interagir avec le fournisseur d'identité et obtenir les informations d'identité de l'utilisateur.

flux de travail de l'authentification traditionnelle

Mode d'authentification centralisée

Contrairement au mode d'authentification traditionnel, le mode d'authentification centralisée extrait l'authentification de l'utilisateur du service d'application. Prenons Apache APISIX comme exemple, le processus d'authentification centralisée est illustré dans la figure ci-dessus : d'abord, l'utilisateur initie une requête, puis la passerelle frontale est responsable du processus d'authentification de l'utilisateur, en interagissant avec le fournisseur d'identité et en envoyant une demande d'autorisation au fournisseur d'identité. Le fournisseur d'identité renvoie les informations de l'utilisateur. Après que la passerelle a terminé l'identification de l'utilisateur, elle transmet les informations d'identité de l'utilisateur à l'application back-end sous forme d'en-tête de requête.

flux de travail du mode d'authentification centralisée

Avantages du mode d'authentification centralisée

Par rapport au mode d'authentification traditionnel, le mode d'authentification centralisée présente les avantages suivants.

  1. Simplifie le processus de développement des applications, réduit la charge de travail de développement et les coûts de maintenance, et évite le développement répété de la logique d'authentification pour chaque application.
  2. Améliore la sécurité des activités, le mode d'authentification centralisée au niveau de la passerelle peut intercepter les requêtes non authentifiées à temps pour protéger les applications back-end.

En même temps, combiné avec les puissantes fonctions de gestion de l'authentification d'Authing, les fonctions suivantes peuvent être réalisées.

  1. Gestion du cycle de vie des services d'authentification via la console, y compris la création, l'activation, la désactivation, etc.
  2. Surveillance visuelle en temps réel des applications, y compris : le nombre de requêtes d'interface, la latence des appels d'interface et les informations d'erreur d'interface, ainsi que des notifications d'alarme en temps réel.
  3. Journalisation centralisée pour visualiser facilement les connexions, déconnexions des utilisateurs et les informations sur les ajustements et modifications de l'application.

Plus de détails peuvent être trouvés dans Authing Access Gateway.

Comment implémenter l'authentification centralisée avec Apache APISIX et Authing

Étape 1 : Configurer Authing

  1. Connectez-vous à votre compte Authing, sélectionnez "Build your own app" et remplissez le nom de l'application et l'adresse d'authentification. Si vous n'avez pas de compte Authing, veuillez visiter Authing, cliquez sur "Login/Register" dans le coin supérieur droit pour enregistrer un compte Authing. Configurer Authing
  2. Cliquez sur "Create" pour créer une application Authing. Création d'une application Authing
  3. Pendant le processus d'authentification, Authing rejettera les URL de rappel autres que celles configurées. Comme il s'agit d'un test local, l'URL de rappel de connexion et l'URL de rappel de déconnexion sont toutes deux définies sur l'adresse d'accès APISIX http://127.0.0.1:9080/. Définir l'URL pour la connexion et la déconnexion
  4. Créer un utilisateur (optionnel). Sur la page de la liste des utilisateurs, créez un utilisateur avec le compte et le mot de passe user1/user1, et vous pouvez définir si l'accès à l'application est autorisé dans la page "User Information - Authorization Management" (par défaut, l'accès est autorisé). Créer un utilisateur
  5. Visitez la page de l'application pour la configuration suivante, qui est nécessaire lors de la configuration du plugin OpenID Connect d'Apache APISIX.
    1. App ID : ID client OAuth, c'est-à-dire l'ID de l'application, correspondant à client_id et {YOUR_CLIENT_ID} ci-dessous.
    2. App secret : Clé secrète client OAuth, c'est-à-dire la clé de l'application. Correspond à client_secret et {YOUR_CLIENT_SECRET} ci-dessous.
    3. Service_discovery_address : L'adresse de découverte du service de l'application. Correspond à {YOUR_DISCOVERY} ci-dessous. configurations

Étape 2 : Installer Apache APISIX

Vous pouvez installer Apache APISIX de plusieurs manières, y compris via des packages sources, Docker, Helm Chart, etc.

Installer les dépendances

L'environnement d'exécution d'Apache APISIX nécessite des dépendances sur NGINX et etcd.

Avant d'installer Apache APISIX, veuillez installer les dépendances en fonction du système d'exploitation que vous utilisez. Nous fournissons les instructions d'installation des dépendances pour CentOS7, Fedora 31 et 32, Ubuntu 16.04 et 18.04, Debian 9 et 10, et macOS. Veuillez vous référer à Install Dependencies pour plus de détails.

Installation via package RPM (CentOS 7)

Cette méthode d'installation est adaptée à CentOS 7 ; veuillez exécuter la commande suivante pour installer Apache APISIX.

sudo yum install -y https://github.com/apache/apisix/releases/download/2.7/apisix-2.7-0.x86_64.rpm

Installation via Docker

Veuillez vous référer à Installing Apache APISIX with Docker.

Installation via Helm Chart

Veuillez vous référer à Installing Apache APISIX with Helm Chart.

Installation via package source

  1. Créez un répertoire nommé apisix-2.7.
mkdir apisix-2.7
  1. Téléchargez le package source de la version Apache APISIX.
wget https://downloads.apache.org/apisix/2.7/apache-apisix-2.7-src.tgz

Vous pouvez également télécharger le package source de la version Apache APISIX depuis le site web d'Apache APISIX. La Page de téléchargement du site officiel d'Apache APISIX fournit également des packages sources pour Apache APISIX, APISIX Dashboard, et APISIX Ingress Controller.

  1. Décompressez le package source de la version Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
  1. Installez les bibliothèques Lua nécessaires à l'exécution.
# Passez au répertoire apisix-2.7
cd apisix-2.7
# Créez les dépendances
make deps

Initialisation des dépendances

Exécutez la commande suivante pour initialiser le fichier de configuration NGINX et etcd.

# initialisez le fichier de configuration NGINX et etcd
make init

Étape 3 : Démarrer Apache APISIX et configurer la route

  1. Exécutez la commande suivante pour démarrer Apache APISIX.

    apisix start
    
  2. Créez des routes et configurez le plugin OpenID Connect. La liste de configuration d'OpenID Connect est la suivante.

ChampValeur par défautDescription
client_idN/AID client OAuth
client_secretN/AClé secrète client OAuth
discoveryN/APoints de terminaison de découverte de service pour les fournisseurs d'identité
scopeopenidPortée des ressources à accéder
relmapisixSpécifie les informations d'authentification de l'en-tête de réponse WWW-Authenticate
bearer_onlyfalseIndique si le jeton dans l'en-tête de la requête doit être vérifié
logout_path/logoutURI de déconnexion
redirect_urirequest_uriL'URI vers laquelle le fournisseur d'identité redirige, par défaut l'adresse de la requête
timeout3Temps d'expiration de la requête en secondes
ssl_verifyfalseIndique si le certificat SSL du fournisseur d'identité doit être vérifié
introspection_endpointN/AL'URL du point de terminaison d'authentification du jeton du fournisseur d'identité, qui sera extrait de la réponse de découverte si laissé vide.
introspection_endpoint_auth_methodclient_secret_basicNom de la méthode d'authentification pour l'introspection du jeton
public_keyN/AClé publique pour l'authentification du jeton
token_signing_alg_values_expectedN/AAlgorithme pour les jetons d'authentification
set_access_token_headertrueIndique si le jeton d'accès doit être porté dans l'en-tête de la requête
access_token_in_authorization_headerfalseLe jeton d'accès est placé dans l'en-tête Authorization lorsque true, et dans l'en-tête X-Access-Token lorsque false.
set_id_token_headerfalseIndique si le jeton ID doit être porté dans l'en-tête X-ID-Token de la requête
set_userinfo_headerfalseIndique si les informations de l'utilisateur doivent être portées dans l'en-tête X-Userinfo de la requête

L'exemple de code suivant crée une route via l'API Admin d'Apache APISIX, en définissant le serveur amont de la route sur httpbin.org. httpbin.org est un service back-end simple pour recevoir et répondre aux requêtes, la page get de httpbin.org sera utilisée ci-dessous, référez-vous à http bin get.

Pour les éléments de configuration spécifiques, veuillez vous référer à Apache APISIX OpenID Connect Plugin.

curl  -XPOST 127.0.0.1:9080/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
    "uri":"/*",
    "plugins":{
        "openid-connect":{
            "client_id":"{YOUR_CLIENT_ID}",
            "client_secret":"{YOUR_CLIENT_SECRET}",
            "discovery":"https://{YOUR_DISCOVERY}",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"apisix",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Étape 4 : Accéder à Apache APISIX

  1. Visitez "http://127.0.0.1:9080/get" et la page est redirigée vers la page de connexion d'Authing car le plugin OpenID Connect est déjà activé (cette page peut être personnalisée dans la console Authing sous "Applications - Branding").  Accéder à Apache APISIX

  2. Entrez le mot de passe du compte utilisateur enregistré avec Authing, ou l'utilisateur user1/user1 créé à l'étape 1, et cliquez sur "Login" pour vous connecter au compte Authing.

  3. Après une connexion réussie, vous pouvez accéder avec succès à la page get dans httpbin.org. La page httpbin.org/get renverra les données de la requête comme suit.

    ...
    "X-Access-Token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6InFqeU55aVdVd2NhbUFxdEdVRUNCeFNsTWxQSWtTR2N1NmkyZzhEUk1OSGsifQ.eyJqdGkiOiJjTy16a0pCS0NSRFlHR2kyWkJhY0oiLCJzdWIiOiI2MWM5OGFmOTg0MjI4YWU0OTYyMDU4NTIiLCJpYXQiOjE2NDA1OTg4NTgsImV4cCI6MTY0MTgwODQ1OCwic2NvcGUiOiJvcGVuaWQgcHJvZmlsZSIsImlzcyI6Imh0dHBzOi8vYXBpc2l4LmF1dGhpbmcuY24vb2lkYyIsImF1ZCI6IjYxYzk4M2M0YjI4NzdkNDg2OWRkOGFjYiJ9.l2V8vDWcCObB1LjIhKs2ARG4J7WuB-0c-bnYZG2GP2zcpl6PMAPcId2B76CaXCU58ajGcfRmOlWJ67UaHrfWKv8IM4vcYN1gwhKdokSyrhEM31gQE-MzNEsEbPaVIGXdpR1N2JnAJK5-tKIjopDAXSwArfO6fQKTpjLhCi3COIA169WGRR4CKCwNzzpFAYP2ilNc18D_HRTBLS6UjxZSNUtWE5dbx7uBjblhwIwn5e1fxiEQcknVK8Dxf8NUliFECvr02HX2hNvmuCECkvA_mZYlshAeqidK8tSEXirAWsWS5jlXFqLiBJkhSHFrbxRyqeOSfJCJR_YcCwk9AzgZGg",
    "X-Id-Token": "eyJhdF9oYXNoIjoiRl8tRjZaUVgtWVRDNEh0TldmcHJmUSIsImJpcnRoZGF0ZSI6bnVsbCwiZmFtaWx5X25hbWUiOm51bGwsImdlbmRlciI6IlUiLCJnaXZlbl9uYW1lIjpudWxsLCJpc3MiOiJodHRwczpcL1wvYXBpc2l4LmF1dGhpbmcuY25cL29pZGMiLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oiLCJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwiaWF0IjoxNjQwNTk4ODU4LCJuaWNrbmFtZSI6bnVsbCwibm9uY2UiOiJmMTlmZjhjODM5NzdmZjNlMDczMzZmMzg3Y2QxM2EzMSIsIm1pZGRsZV9uYW1lIjpudWxsLCJleHAiOjE2NDE4MDg0NTgsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYXVkIjoiNjFjOTgzYzRiMjg3N2Q0ODY5ZGQ4YWNiIiwicHJvZmlsZSI6bnVsbH0=",
    "X-Userinfo": "eyJ3ZWJzaXRlIjpudWxsLCJ6b25laW5mbyI6bnVsbCwibmFtZSI6bnVsbCwicHJvZmlsZSI6bnVsbCwibmlja25hbWUiOm51bGwsInN1YiI6IjYxYzk4YWY5ODQyMjhhZTQ5NjIwNTg1MiIsImxvY2FsZSI6bnVsbCwiYmlydGhkYXRlIjpudWxsLCJmYW1pbHlfbmFtZSI6bnVsbCwiZ2VuZGVyIjoiVSIsImdpdmVuX25hbWUiOm51bGwsIm1pZGRsZV9uYW1lIjpudWxsLCJwaWN0dXJlIjoiaHR0cHM6XC9cL2ZpbGVzLmF1dGhpbmcuY29cL2F1dGhpbmctY29uc29sZVwvZGVmYXVsdC11c2VyLWF2YXRhci5wbmciLCJwcmVmZXJyZWRfdXNlcm5hbWUiOm51bGwsInVwZGF0ZWRfYXQiOiIyMDIxLTEyLTI3VDA5OjU0OjE3Ljc3M1oifQ=="
    ...
    

    X-Access-Token : Apache APISIX place le jeton d'accès obtenu du fournisseur d'identité dans l'en-tête de requête X-Access-Token, optionnellement dans l'en-tête Authorization via access_token_in_authorization_header dans la configuration du plugin.

    X-Access-Token

    X-Id-Token : Apache APISIX place le jeton ID obtenu du fournisseur d'identité dans l'en-tête de requête X-Id-Token après encodage base64, qui peut être activé ou désactivé par set_id_token_header dans la configuration du plugin.

    X-Id-Token

    X-Userinfo : Apache APISIX place les informations de l'utilisateur obtenues du fournisseur d'identité dans X-Userinfo après les avoir encodées en base64. Vous pouvez choisir d'activer ou de désactiver cette fonctionnalité en utilisant set_userinfo_header dans la configuration du plugin.

    X-Userinfo

    Comme vous pouvez le voir, Apache APISIX portera les en-têtes de requête X-Access-Token, X-Id-Token et X-Userinfo vers le serveur amont. Le serveur amont peut analyser ces en-têtes pour obtenir les informations d'identité de l'utilisateur et les métadonnées de l'utilisateur.

  4. Dans la section "Audit Log - User Behavior Log" de la console Authing, vous pouvez observer les informations de connexion de user1. Informations de connexion

Résumé

Cet article décrit les étapes détaillées pour interfacer Apache APISIX avec Authing.

Apache APISIX ne se contente pas de maintenir ses propres performances élevées, mais accorde également une grande importance à la construction de son écosystème open source. Actuellement, Apache APISIX dispose de plus de 10 plugins liés à l'authentification et à l'autorisation, prenant en charge l'interfaçage avec les services d'authentification et d'autorisation mainstream dans l'industrie.

Si vous avez besoin d'interfacer avec d'autres autorités d'authentification, visitez le GitHub d'Apache APISIX et laissez vos suggestions via issue ; ou abonnez-vous à la liste de diffusion d'Apache APISIX pour exprimer vos pensées par e-mail.

Share article link