Comment utiliser Apache APISIX Auth avec Okta

Fei Han

September 7, 2021

Ecosystem

Utilisation du plugin OpenID Connect d'Apache APISIX pour l'authentification centralisée des identités
Utiliser le plugin OpenID Connect d'Apache APISIX pour configurer l'authentification Okta est un processus simple en trois étapes. Cela vous permet de passer du mode d'authentification traditionnel au mode d'authentification centralisée des identités. Les sections suivantes décrivent les étapes pour configurer l'authentification Okta en utilisant le plugin OpenID Connect pour Apache APISIX.

Le mode d'authentification centralisée des identités, comparé au mode d'authentification traditionnel, présente les avantages suivants :

  1. L'authentification centralisée simplifie le processus de développement des applications.
  2. L'authentification centralisée améliore la sécurité des entreprises.

Prérequis

Avoir un compte Okta prêt à l'emploi.

Étape 1 : Configuration d'Okta

  1. Connectez-vous à votre compte Okta, cliquez sur "Create App Integration" pour créer une application Okta. Create App Integration
  2. Sélectionnez "OIDC - OpenID Connect" comme méthode de connexion, et choisissez "Web Application" comme type d'application. Create a new App Integration
  3. Définissez l'URL de redirection pour la connexion et la déconnexion. Les "Sign-in redirect URIs" sont les liens autorisés à être redirigés après une connexion réussie, et les "Sign-out redirect URIs" sont les liens redirigés après une déconnexion réussie. Dans cet exemple, nous définissons les deux URI de redirection à http://127.0.0.1:9080/. Set the redirect URL for login and logout
  4. Après avoir terminé les paramètres, cliquez sur "Save" pour enregistrer les modifications. save the changes
  5. Visitez la page Générale de l'application pour obtenir les configurations suivantes, nécessaires pour configurer le plugin OpenID Connect d'Apache APISIX.
  • Client ID : L'ID de l'application, correspondant à client_id ci-dessous.
  • Client secret : La clé de l'application, correspondant à client_secret ci-dessous.
  • Domaine Okta : Le nom de domaine utilisé par l'application, correspondant à {ISSUER} ci-dessous.

obtain configuration

Étape 2 : Installation d'Apache APISIX

Installation des 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 & 32, Ubuntu 16.04 & 18.04, Debian 9 & 10, et MacOS. Veuillez consulter Install Dependencies pour plus de détails.

Installation via un 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 consulter : Installing Apache APISIX with Docker.

Installation via Helm Chart

Veuillez consulter : Installing Apache APISIX with Helm Chart.

Installation via Source Release

  1. Créez un répertoire nommé apisix-2.7.

    mkdir apisix-2.7
    
  2. 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. Le Site Officiel d'Apache APISIX - Page de Téléchargement propose également des packages source pour Apache APISIX, APISIX Dashboard et APISIX Ingress Controller.

  3. Décompressez le package source de la version Apache APISIX.

    tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
    
  4. 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émarrez Apache APISIX et configurez la route correspondante

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

    apisix start
    
  2. Créez une route et configurez le plugin OpenID Connect. L'exemple de code suivant crée une route via l'API Admin d'Apache APISIX, en définissant le chemin en amont sur httpbin.org, un service backend simple pour recevoir et répondre aux requêtes. Nous utiliserons la page get de httpbin.org. Veuillez consulter http bin get pour plus d'informations. Pour les éléments de configuration spécifiques, veuillez consulter le Plugin OpenID Connect d'Apache APISIX.

Les champs de configuration OpenID Connect sont listés ci-dessous :

ChampValeur par défautDescription
client_id""ID client OAuth.
client_secret""Secret client OAuth.
discovery""Points de terminaison de découverte de service pour les fournisseurs d'identité.
scopeopenidÉtendue des ressources à accéder.
relmapisixSpécifie les informations d'authentification de l'en-tête de réponse WWW-Authenticate.
bearer_onlyfalseIndique si le token 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_verifyfalseVérifie le certificat SSL du fournisseur d'identité.
introspection_endpoint""URL du point de terminaison d'authentification du token 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 token.
public_key""Clé publique pour un token d'authentification.
token_signing_alg_values_expected""Algorithme pour les tokens d'authentification.
set_access_token_headertrueIndique si le token d'accès doit être inclus dans l'en-tête de la requête.
access_token_in_authorization_headerfalseIndique si le token d'accès doit être placé dans l'en-tête Authorization. Le token d'accès est placé dans l'en-tête Authorization lorsque cette valeur est true et dans l'en-tête X-Access-Token sinon.
set_id_token_headertrueIndique si le token ID doit être inclus dans l'en-tête X-ID-Token de la requête.
set_userinfo_headertrueIndique si les informations utilisateur doivent être incluses dans l'en-tête X-Userinfo de la requête.
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_ISSUER}/.well-known/openid-configuration",
            "scope":"openid profile",
            "bearer_only":false,
            "realm":"master",
            "introspection_endpoint_auth_method":"client_secret_post",
            "redirect_uri":"http://127.0.0.1:9080/"
        }
    },
    "upstream":{
        "type":"roundrobin",
        "nodes":{
            "httpbin.org:80":1
        }
    }
}'

Vérification

  1. Visitez "http://127.0.0.1:9080/get" et la page est redirigée vers la page de connexion Okta car le plugin OpenID Connect est activé. visit Okta login page

  2. Entrez le nom d'utilisateur et le mot de passe du compte Okta de l'utilisateur et cliquez sur "Sign In" pour vous connecter à votre compte Okta.

  3. Après une connexion réussie, vous pouvez accéder à la page get de "httpbin.org". La page "httpbin.org/get" renverra les données demandées avec X-Access-Token, X-Id-Token et X-Userinfo comme suit.

    "X-Access-Token": "******Y0RPcXRtc0FtWWVuX2JQaFo1ZVBvSlBNdlFHejN1dXY5elV3IiwiYWxnIjoiUlMyNTYifQ.***TVER3QUlPbWZYSVRzWHRxRWh2QUtQMWRzVDVGZHZnZzAiLCJpc3MiOiJodHRwczovL3FxdGVzdG1hbi5va3RhLmNvbSIsImF1ZCI6Imh0dHBzOi8vcXF0ZXN0bWFuLm9rdGEuY29tIiwic3ViIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImlhdCI6MTYyODEyNjIyNSwiZXhwIjoxNjI4MTI5ODI1LCJjaWQiOiIwb2ExMWc4ZDg3TzBGQ0dYZzY5NiIsInVpZCI6IjAwdWEwNWVjZEZmV0tMS3VvNjk1Iiwic2NwIjpbIm9wZW5pZCIsInByb2Zpb***.****iBshIcJhy8QNvzAFD0fV4gh7OAdTXFMu5k0hk0JeIU6Tfg_Mh-josfap38nxRN5hSWAvWSk8VNxokWTf1qlaRbypJrKI4ntadl1PrvG-HgUSFD0JpyqSQcv10TzVeSgBfOVD-czprG2Azhck-SvcjCNDV-qc3P9KoPQz0SRFX0wuAHWUbj1FRBq79YnoJfjkJKUHz3uu7qpTK89mxco8iyuIwB8fAxPMoXjIuU6-6Bw8kfZ4S2FFg3GeFtN-vE9bE5vFbP-JFQuwFLZNgqI0XO2S7l7Moa4mWm51r2fmV7p7rdpoNXYNerXOeZIYysQwe2_L****",
    "X-Id-Token": "******aTdDRDJnczF5RnlXMUtPZUtuSUpQdyIsImFtciI6WyJwd2QiXSwic3ViIjoiMDB1YTA1ZWNkRmZXS0xLdW82OTUiLCJpc3MiOiJodHRwczpcL1wvcXF0ZXN0bWFuLm9rdGEuY29tIiwiYXVkIjoiMG9hMTFnOGQ4N08wRkNHWGc2OTYiLCJuYW1lIjoiUGV0ZXIgWmh1IiwianRpIjoiSUQuNGdvZWo4OGUyX2RuWUI1VmFMeUt2djNTdVJTQWhGNS0tM2l3Z0p5TTcxTSIsInZlciI6MSwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsImV4cCI6MTYyODEyOTgyNSwiaWRwIjoiMDBvYTA1OTFndHAzMDhFbm02OTUiLCJub25jZSI6ImY3MjhkZDMxMWRjNGY3MTI4YzlmNjViOGYzYjJkMDgyIiwiaWF0IjoxNjI4MTI2MjI1LCJhdXRoX3RpbWUi*****",
    "X-Userinfo": "*****lfbmFtZSI6IlpodSIsImxvY2FsZSI6ImVuLVVTIiwicHJlZmVycmVkX3VzZXJuYW1lIjoiMjgzMDE4Nzk5QHFxLmNvbSIsInVwZGF0ZWRfYXQiOjE2MjgwNzA1ODEsInpvbmVpbmZvIjoiQW1lcmljYVwvTG9zX0FuZ2VsZXMiLCJzdWIiOiIwMHVhMDVlY2RGZldLTEt1bzY5NSIsImdpdmVuX25hbWUiOiJQZXRlciIsIm5hbWUiOiJQZXRl****"
    

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

X-Access-Token

X-Id-Token : Apache APISIX récupère le token ID du fournisseur d'identité et l'encode en base64 dans l'en-tête de requête X-Id-Token. Vous pouvez choisir d'activer cette fonction via set_id_token_header dans la configuration du plugin, activée par défaut.

X-Id-Token

X-Userinfo : Apache APISIX récupère les informations utilisateur du fournisseur d'identité et les place dans X-Userinfo après un encodage en Base64. Vous pouvez choisir d'activer cette fonction via set_userinfo_header dans la configuration du plugin, activée par défaut.

X-Userinfo

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

Nous avons montré le processus de construction d'une authentification centralisée des identités depuis Okta directement dans la passerelle Apache APISIX. Il est facile de s'inscrire pour un compte développeur Okta gratuit pour commencer. Notre approche réduit la charge de travail des développeurs et permet une expérience sécurisée et rationalisée.

À propos d'Okta

Okta est une solution personnalisable, sécurisée et prête à l'emploi pour ajouter des services d'authentification et d'autorisation à vos applications. Obtenez une authentification scalable intégrée directement dans votre application sans les coûts de développement, les risques de sécurité et la maintenance associés à son codage manuel. Vous pouvez connecter n'importe quelle application dans n'importe quel langage ou sur n'importe quelle pile à Okta et définir comment vous souhaitez que vos utilisateurs se connectent. Chaque fois qu'un utilisateur tente de s'authentifier, Okta vérifie son identité et renvoie les informations nécessaires à votre application.

À propos d'Apache APISIX

Apache APISIX est une passerelle API dynamique, en temps réel et haute performance. Apache APISIX fournit des fonctionnalités riches de gestion du trafic telles que l'équilibrage de charge, l'amont dynamique, la publication canari, la rupture de circuit, l'authentification, l'observabilité, et plus encore. Vous pouvez utiliser Apache APISIX pour gérer le trafic traditionnel nord-sud, ainsi que le trafic est-ouest entre les services. Il peut également être utilisé comme contrôleur ingress k8s.

Des centaines d'entreprises dans le monde utilisent Apache APISIX, couvrant les secteurs de la finance, de l'internet, de la fabrication, de la vente au détail, des opérateurs, comme la NASA, l'Usine Numérique de l'Union Européenne, TravelSky, Tencent, Huawei, Weibo, China Mobile, Taikang, 360, etc.

Github : https://github.com/apache/apisix

Site web : https://apisix.apache.org

Tags: