Utilisation du plugin OpenID Connect d'Apache APISIX pour l'authentification centralisée des identités

API7.ai

September 7, 2021

Ecosystem

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. 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, 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" pour la méthode de connexion, et "Web Application" pour le 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 de connexion et de déconnexion à 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 Apache APISIX OpenID Connect.
  • Client ID : L'ID de l'application, qui correspond à client_id ci-dessous.
  • Client secret : La clé de l'application, qui correspond à 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 selon le 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 vous référer à Install Dependencies pour plus de détails.

Installation via un paquet RPM (CentOS 7)

Cette méthode d'installation est adaptée pour 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 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 fournit également des packages sources 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 dépendantes pour 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 à httpbin.org, un service backend simple pour recevoir et répondre aux requêtes. Ce qui suit utilisera la page get de httpbin.org. Veuillez vous référer à http bin get pour plus d'informations. Pour les éléments de configuration spécifiques, veuillez vous référer au 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é.
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 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, l'unité est définie en secondes.
ssl_verifyfalseVérifie le certificat SSL du fournisseur d'identité.
introspection_endpoint""L'URL du point de terminaison d'authentification du token du fournisseur d'identité, qui sera extrait de la découverte, réponse 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 porté dans l'en-tête de la requête.
access_token_in_authorization_headerfalseIndique si un 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 définie à true et dans l'en-tête X-Access-Token lorsqu'elle est définie à false.
set_id_token_headertrueIndique si le token ID doit être porté dans l'en-tête de requête X-ID-Token.
set_userinfo_headertrueIndique si les informations utilisateur doivent être portées dans l'en-tête de requête X-Userinfo.
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 dans "httpbin.org". La page "httpbin.org/get" retournera 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'utilisateur dans l'en-tête de requête X-Access-Token, optionnellement via access_token_in_authorization_header dans la configuration du plugin dans l'en-tête de requête Authorization.

X-Access-Token

X-Id-Token : Apache APISIX obtiendra le token Id du fournisseur d'utilisateur via l'encodage 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, elle est activée par défaut.

X-Id-Token

X-Userinfo : Apache APISIX obtiendra les informations utilisateur du fournisseur d'utilisateur et les placera dans X-Userinfo après les avoir encodées en Base64, vous pouvez choisir d'activer cette fonction via set_userinfo_header dans la configuration du plugin, elle est activée par défaut.

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 en amont. L'amont peut analyser ces en-têtes pour obtenir les informations d'ID utilisateur et les métadonnées utilisateur.

Nous avons montré le processus de construction de l'authentification centralisée directement depuis Okta 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 développement et permet une expérience sûre 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 la surcharge de développement, les risques de sécurité et la maintenance qui découlent de son codage vous-même. 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érifiera son identité et enverra 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 un contrôleur ingress k8s.

Des centaines d'entreprises dans le monde ont utilisé Apache APISIX, couvrant la finance, l'internet, la fabrication, la vente au détail, les 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

Share article link