BLOG | NGINX

Accès API sécurisé avec NGINX et Azure Active Directory

NGINX-Partie-de-F5-horiz-black-type-RGB
Vignette de Cody Green
Cody Vert
Publié le 6 octobre 2022

Les API jouent un rôle essentiel dans la connectivité des applications, mais elles sont également vulnérables aux attaques. Dans le passé, avec les applications monolithiques, il n’y avait qu’un seul point d’entrée à sécuriser. Dans les architectures de microservices, une seule application se compose souvent de plusieurs microservices connectés via des API, et chacune de ces API peut avoir des centaines de points de terminaison. Cela rend la surface d’attaque potentielle des API énorme, chaque nouvelle API créant un point d’entrée dans votre périmètre de sécurité.

Il existe de nombreuses stratégies pour sécuriser vos API. L’un des plus fondamentaux est le contrôle d’accès . En termes simples, vous devez vérifier l’identité de l’utilisateur (authentification ou AuthN) et confirmer qu’il peut accéder à certaines ressources (autorisation ou AuthZ). L’implémentation d’OpenID Connect (OIDC) est l’une des approches de contrôle d’accès les plus courantes utilisées pour les API. Vous pouvez le mettre en place et le faire fonctionner en quelques minutes avec API Connectivity Manager , qui fait partie de F5 NGINX Management Suite .

Dans ce didacticiel, vous apprendrez à exécuter la partie autorisation du workflow OIDC en configurant la validation JSON Web Token (JWT) avec API Connectivity Manager et Azure Active Directory (Azure AD).

Qu'est-ce qu'OpenID Connect ?

OpenID Connect (OIDC) est un protocole d'identité construit sur le protocole OAuth 2.0 . OIDC permet aux clients de vérifier l’identité de l’utilisateur final ou de l’appareil. Il s’agit d’une partie du contrôle d’accès, qui comprend à la fois l’authentification et l’autorisation :

  • L'authentification vérifie qu'un utilisateur ou un appareil est bien celui qu'il prétend être
  • L'autorisation détermine à quoi un utilisateur ou un appareil vérifié peut accéder

Il existe de nombreuses implémentations différentes d’OIDC, y compris Azure AD, que vous utiliserez dans ce didacticiel. Vous pouvez également utiliser d’autres solutions OIDC, telles que F5 BIG-IP Access Policy Manager (APM), Okta, Auth0, Ping Identity, etc., avec API Connectivity Manager.

Ce dont vous avez besoin pour commencer

Assurez-vous d'avoir les prérequis suivants :

Vous pouvez vous inscrire à votre essai gratuit de 30 jours de NGINX Management Suite si vous avez besoin d'accéder à API Connectivity Manager.

Créer une application Azure AD

Ouvrez un navigateur et connectez-vous à votre portail Azure .

Cliquez sur Inscriptions d'applications dans le menu de gauche.

Page d'accueil du portail Azure AD

Figure 1 : Page d'accueil du portail Azure AD

Cliquez sur le bouton Nouvelle inscription .

Inscription à l'application Azure AD

Figure 2 : Inscription à l'application Azure AD

Pour créer une nouvelle application, fournissez un nom , une URI de redirection et cliquez sur le bouton Enregistrer . Dans cette démo, vous utiliserez Postman , vous utiliserez donc l' URI de redirection Postman OIDC .

Créer une nouvelle application Azure AD

Figure 3 : Créer une nouvelle application Azure AD

Maintenant que votre application est créée, vous devez créer des étendues OAuth pour fournir l'accès à l'API. Cliquez sur le lien Exposer une API dans le menu de gauche.

Exposer une API

Figure 4 : Exposer une API

Cliquez sur Ajouter une portée .

Ajouter une portée

Figure 5 : Ajouter une portée

Acceptez l’URI d’ID d’application par défaut ou créez le vôtre et cliquez sur le bouton Enregistrer et continuer . Si vous souhaitez créer votre propre URI d’ID d’application, vous devez enregistrer le domaine souhaité auprès d’Azure AD.

URL de l'identifiant de l'application

Figure 6 : URL de l'identifiant de l'application

Pour cette démo, votre périmètre est basé sur un exemple Microsoft. Remplissez le formulaire avec les informations suivantes puis cliquez sur le bouton Ajouter une portée :

Nom de la portée : Employés.Lisez.Tout.
Qui peut consentir ? : Administrateurs et utilisateurs
Nom d'affichage du consentement de l'administrateur : Accès en lecture seule aux dossiers des employés
Description du consentement de l'administrateur : Autoriser l'accès en lecture seule à toutes les données des employés.
Nom d'affichage du consentement de l'utilisateur : Accès en lecture seule à vos dossiers d'employés
Description du consentement de l'utilisateur : Autorisez l'accès en lecture seule à vos données d'employés.

Ajouter une portée

Figure 7 : Ajouter une portée

Ensuite, vous devez autoriser l’application cliente. Pour ce faire, récupérez l'ID client. Cliquez sur le lien Présentation dans le menu de gauche et copiez l' ID d'application (client) .

ID client de l'application

Figure 8 : ID client de l'application

Cliquez à nouveau sur le lien Exposer une API , puis cliquez sur le bouton Ajouter une application cliente .

Ajouter une application cliente

Figure 9 : Ajouter une application cliente

Collez l'ID client de l'application dans le champ ID client et cochez la case en regard de l'URI de votre ID d'application. Cliquez ensuite sur le bouton Ajouter une application .

Ajouter une application cliente

Figure 10 : Ajouter une application cliente

Ensuite, pour cette démo, vous utiliserez un code d’autorisation avec le flux de code d’autorisation , donc un secret client sera nécessaire pour Postman. Cliquez sur le lien Certificats et secrets dans le menu de gauche, puis cliquez sur le bouton Nouveau secret client .

Nouveau secret client

Figure 11 : Nouveau secret client

Nommez votre secret et laissez le délai d'expiration par défaut.

Nom secret

Figure 12 : Nom secret

Ensuite, copiez votre secret client et stockez-le dans un coffre-fort de mots de passe afin de pouvoir l’utiliser ultérieurement.

Secret du client

Figure 13 : Secret du client

Configurer l'assertion JWT dans API Connectivity Manager

Maintenant que votre application Azure AD est configurée, vous pouvez configurer le cluster de passerelle API dans API Connectivity Manager pour effectuer une assertion de jeton Web JSON pour votre service défini. Pour cette étape, vous devez déterminer l’URI des ensembles de clés Web JSON (JWK) de votre locataire Azure AD.

Vous pouvez obtenir votre URI JWKS à partir du Point de terminaison bien connu du locataire Azure AD:
https://login.microsoftonline.com/<tenant-id>/v2.0/.well-known/openid-configuration

Cette page fournira une charge utile JSON contenant la clé jwks_uri . Vous devrez copier sa valeur.

Point de terminaison bien connu du locataire Azure AD

Figure 14 : Point de terminaison bien connu du locataire Azure AD

Maintenant que vous disposez de votre URI JWKS, ouvrez votre console API Connectivity Manager et accédez à la configuration de votre proxy de service. Cliquez sur Ajouter une politique pour la politique d’assertion de jeton Web JSON .

Politiques de proxy du service de passerelle

Figure 15 : Politiques de proxy du service de passerelle

Ensuite, collez l’URI JKWS de votre locataire Azure AD dans le champ Emplacement de l’URI , puis cliquez sur le bouton Ajouter .

Politique d'assertion de jeton Web JSON

Figure 16 : Politique d'assertion de jeton Web JSON

Cliquez sur le bouton Enregistrer et publier pour envoyer cette politique à votre cluster de passerelle API.

Politique de passerelle de service

Figure 17 : Politique de passerelle de service

C'est ça! Votre instance API Connectivity Manager est désormais configurée pour effectuer une assertion JWT sur la passerelle de service configurée.

Test avec Postman

Il est maintenant temps de tester votre configuration et de vous assurer qu’elle se comporte comme prévu. Pour commencer, vous devez obtenir quelques éléments de votre application Azure AD :

  • Secret du client d’application (vous l’avez enregistré plus tôt)
  • Portée OAuth
  • Point de terminaison d'autorisation OAuth
  • Point de terminaison du jeton OAuth

Pour obtenir l’étendue OAuth, ouvrez votre portail Azure et revenez à la page d’inscription de votre application. Ensuite, cliquez sur le lien Exposer une API dans le menu de gauche et cliquez sur le symbole Copier pour votre portée. Enregistrez cette valeur afin de pouvoir l'utiliser dans quelques minutes.

Portées de l'API

Figure 18 : Portées de l'API

Pour obtenir les points de terminaison d’autorisation et de jeton OAuth, cliquez sur le lien Présentation dans le menu de gauche, puis cliquez sur le bouton Points de terminaison . Après cela, copiez les URI du point de terminaison d’autorisation et de jeton.

Points de terminaison d'application Azure AD

Figure 19 : Points de terminaison d'application Azure AD

URL des points de terminaison d'application Azure AD

Figure 20 : URL des points de terminaison d'application Azure AD

Ouvrez Postman et cliquez sur le menu Environnements . Cliquez ensuite sur le lien Créer un environnement .

Environnement de création du facteur

Figure 21 : Environnement de création du facteur

Nommez votre environnement et ajoutez six variables avec les valeurs (enregistrées lors des étapes précédentes) dans la colonne Valeur initiale et la colonne Valeur actuelle , puis cliquez sur le bouton Enregistrer .

  • client_id : ID client de l'application Azure AD
  • client_secret : Secret client de l'application Azure AD
  • auth_url : URL d'autorisation OAuth du locataire Azure AD
  • jeton_url : URL du jeton OAuth du locataire Azure AD
  • identifiant_locataire : ID de l'annuaire Azure AD (locataire)
  • portée : Portée de l'API de l'application Azure AD avec l'URL de l'ID d'application

Variables d'environnement du facteur

Figure 22 : Variables d'environnement du facteur

Ouvrez un nouvel onglet dans Postman et suivez ces étapes :

  • Changez votre environnement en ACM en haut à droite
  • Ajoutez l'URL de votre API à la barre d'adresse
  • Cliquez sur l'onglet Authentification
  • Changer le type en OAuth 2.0
  • Faites défiler la configuration d’authentification vers le bas et définissez les variables suivantes :
    • URL d'authentification : {{auth_url}}
    • URL du jeton d'accès : {{token_url}}
    • ID client : {{client_id}}
    • Secret du client : {{client_secret}}
  • Cliquez sur le bouton Obtenir un nouveau jeton d'accès

Demande du facteur

Figure 23 : Demande du facteur

Configuration de l'authentification du facteur

Figure 24 : Configuration de l'authentification du facteur

Une fenêtre de navigateur s’ouvrira et vous serez invité à vous connecter avec vos informations d’identification Azure AD. Une fois authentifié avec succès, vous serez redirigé vers Postman et la fenêtre suivante apparaîtra. Cliquez sur le bouton Utiliser le jeton .

Jeton d'utilisation du facteur

Figure 25 : Jeton d'utilisation du facteur

Maintenant que vous disposez de votre jeton d’accès OAuth, vous pouvez enfin effectuer votre appel API. Cliquez sur le bouton Enregistrer , puis sur le bouton Envoyer .

Si tout est configuré correctement, vous devriez voir une réponse 200 OK.

Demande réussie du facteur

Figure 26 : Demande réussie du facteur

Conclusion

Vous disposez désormais d’API Connectivity Manager qui protège vos API à l’aide de jetons d’accès OAuth Azure AD. Les prochaines étapes consisteraient à ajouter des étendues OAuth supplémentaires et à configurer le cluster de passerelle API dans API Connectivity Manager pour transmettre ces étendues à vos API protégées – mais c’est un sujet pour un autre article !

Commencez dès aujourd'hui

Démarrez un essai gratuit de 30 jours de NGINX Management Suite , qui comprend API Connectivity Manager et Instance Manager .

Une version de cet article est parue pour la première fois sur codygreen.com . Il est édité et réimprimé ici avec la permission de l'auteur.


« Cet article de blog peut faire référence à des produits qui ne sont plus disponibles et/ou qui ne sont plus pris en charge. Pour obtenir les informations les plus récentes sur les produits et solutions F5 NGINX disponibles, explorez notre famille de produits NGINX . NGINX fait désormais partie de F5. Tous les liens NGINX.com précédents redirigeront vers un contenu NGINX similaire sur F5.com."