Utilisation du plugin OpenID Connect d'Apache APISIX pour l'authentification centralisée des identités
API7.ai
September 7, 2021
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 :
- 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" pour la méthode de connexion, et "Web Application" pour le 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 de connexion et de déconnexion à 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 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.
É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
-
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 fournit également des packages sources 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 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
-
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 à 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 :
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 | Portée 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, l'unité est définie en secondes. |
ssl_verify | false | Vé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_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 porté dans l'en-tête de la requête. |
access_token_in_authorization_header | false | Indique 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_header | true | Indique si le token ID doit être porté dans l'en-tête de requête X-ID-Token. |
set_userinfo_header | true | Indique 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
-
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 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-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-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.
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