Comment utiliser Apache APISIX Auth avec Okta
Fei Han
September 7, 2021
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 :
- L'authentification centralisée simplifie le processus de développement des applications.
- 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
- Connectez-vous à votre compte Okta, cliquez sur "Create App Integration" pour créer une application Okta.
- Sélectionnez "OIDC - OpenID Connect" comme méthode de connexion, et choisissez "Web Application" comme type d'application.
- 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/.
- Après avoir terminé les paramètres, cliquez sur "Save" pour enregistrer les modifications.
- 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.
É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
-
Créez un répertoire nommé
apisix-2.7
.mkdir apisix-2.7
-
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.
-
Décompressez le package source de la version Apache APISIX.
tar zxvf apache-apisix-2.7-src.tgz -C apisix-2.7
-
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
-
Exécutez la commande suivante pour démarrer Apache APISIX.
apisix start
-
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 :
Champ | Valeur par défaut | Description |
---|---|---|
client_id | "" | ID client OAuth. |
client_secret | "" | Secret client OAuth. |
discovery | "" | Points de terminaison de découverte de service pour les fournisseurs d'identité. |
scope | openid | Étendue des ressources à accéder. |
relm | apisix | Spécifie les informations d'authentification de l'en-tête de réponse WWW-Authenticate. |
bearer_only | false | Indique si le token dans l'en-tête de la requête doit être vérifié. |
logout_path | /logout | URI de déconnexion. |
redirect_uri | request_uri | L'URI vers laquelle le fournisseur d'identité redirige, par défaut l'adresse de la requête. |
timeout | 3 | Temps d'expiration de la requête, en secondes. |
ssl_verify | false | Vé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_method | client_secret_basic | Nom 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_header | true | Indique si le token d'accès doit être inclus dans l'en-tête de la requête. |
access_token_in_authorization_header | false | Indique 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_header | true | Indique si le token ID doit être inclus dans l'en-tête X-ID-Token de la requête. |
set_userinfo_header | true | Indique 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
-
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é.
-
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.
-
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-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-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.
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