Tutoriel : Authentifier un client avec Spring Cloud Gateway sur Azure Spring Apps
Remarque
Les plans Essentiel, Standard et Entreprise seront déconseillés à partir de la mi-mars 2025, avec une période de mise hors service de 3 ans. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez l’annonce de la mise hors service d’Azure Spring Apps.
Le plan de consommation Standard et dédié sera déconseillé à partir du 30 septembre 2024, avec un arrêt complet au bout de six mois. Nous vous recommandons de passer à Azure Container Apps. Pour plus d’informations, consultez Migrer le plan de consommation Standard et dédié Azure Spring Apps vers Azure Container Apps.
Cet article s’applique à : ✔️ Consommation standard et dédiée (préversion)
Ce guide de démarrage rapide vous montre comment sécuriser la communication entre une application cliente et une application de microservices hébergée sur Azure Spring Apps et protégée par une application Spring Cloud Gateway. L’application cliente est vérifiée en tant que principal de sécurité pour établir un contact avec le microservice déployé sur Azure Spring Apps, en utilisant l’application créée avec Spring Cloud Gateway. Cette méthode utilise les fonctionnalités de relais de jetons de Spring Cloud Gateway et les fonctionnalités de serveur de ressources de Spring Security pour les processus d’authentification et d’autorisation. Ces processus sont réalisés via l’exécution du flux d’informations d’identification du client OAuth 2.0.
La liste suivante montre la composition de l’exemple de projet :
- SPA Books : cette application monopage (SPA, single page application), hébergée localement, interagit avec le microservice Books pour ajouter ou rechercher des livres.
- Microservice Books :
- Une application Spring Cloud Gateway hébergée dans Azure Spring Apps. Cette application fonctionne comme passerelle vers les API RESTful de Books.
- Une application d’API RESTful Spring Boot hébergée dans Azure Spring Apps. Cette application stocke les informations du livre dans une base de données H2. Le service Books expose deux points de terminaison REST pour écrire et lire des livres.
1. Prérequis
- Un abonnement Azure. Si vous n’avez pas d’abonnement, créez un compte gratuit avant de commencer.
- Git.
- Kit de développement Java (JDK), version 17.
- Un locataire Microsoft Entra. Pour plus d’informations sur la création d’un locataire Microsoft Entra, consultez Démarrage rapide : Créer un nouveau locataire dans Microsoft Entra ID.
- Azure CLI version 2.45.0 ou ultérieure.
- Installez Node.js.
2. Préparer le projet Spring
Procédez comme suit pour cloner et exécuter l’application localement :
Utilisez la commande suivante pour cloner l’exemple de projet à partir de GitHub :
git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
Utilisez la commande suivante pour générer les services back-end Books :
cd azure-spring-apps-sso-client-credential ./mvnw clean package
Entrez le répertoire du projet SPA et utilisez la commande suivante pour installer les dépendances :
npm install @azure/msal-node
3. Préparer l’environnement cloud
Pour exécuter cet exemple, les principales ressources requises sont une instance Azure Spring Apps et une instance Azure Database pour PostgreSQL. Cette section décrit les étapes de création de ces ressources.
3.1. Connectez-vous au portail Azure.
Ouvrez votre navigateur web pour accéder au Portail Azure. Entrez vos informations d’identification pour vous connecter au Portail Azure. Il s’ouvre par défaut sur le tableau de bord des services.
3.2. Créer une instance Azure Spring Apps
Utilisez la procédure suivante pour créer une instance de service :
Sélectionnez Créer une ressource dans le coin du portail Azure.
Sélectionnez Calcul>Azure Spring Apps.
Remplissez le formulaire Informations de base avec les informations suivantes :
Paramètre Valeur suggérée Description Abonnement Votre nom d’abonnement Abonnement Azure que vous souhaitez utiliser pour votre serveur. Si vous disposez de plusieurs abonnements, choisissez celui dans lequel vous souhaitez que la ressource soit facturée. Groupe de ressources myresourcegroup Un nouveau nom de groupe de ressources ou un nom de groupe existant dans votre abonnement. Name myasa Nom unique qui identifie votre instance Azure Spring Apps. Le nom doit comporter entre 4 et 32 caractères, et contenir uniquement des lettres minuscules, des chiffres et des traits d’union. Le premier caractère du nom du service doit être une lettre, et le dernier doit être une lettre ou un chiffre. Planifier Consommation standard et dédiée (préversion) Le plan tarifaire détermine les ressources et le coût associés à votre instance. Région La région la plus proche de vos utilisateurs L’emplacement géographique le plus proche de vos utilisateurs. Environnement Container Apps myacaenv Sélectionnez l’instance d’environnement Container Apps pour partager le même réseau virtuel avec d’autres services et ressources. Utilisez le tableau suivant comme guide pour créer l’environnement Container Apps :
Paramètre Valeur suggérée Description Nom de l’environnement myacaenv Un nom unique pour identifier votre service d’environnement Azure Container Apps. Planifier Consommation Le plan tarifaire détermine les ressources et le coût associés à votre instance. Redondant interzone Désactivé Indique s’il faut créer votre service d’environnement Container Apps dans une zone de disponibilité Azure. Important
Le profil de charge de travail Consommation a un modèle de facturation de paiement à l’utilisation, sans coût de départ. Vous êtes facturé pour le profil de charge de travail dédié en fonction des ressources approvisionnées. Pour plus d’informations, consultez Profils de charge de travail dans Consommation + Environnements de structure de plan dédié dans Azure Container Apps (préversion) et Prix Azure Spring Apps.
Sélectionnez Vérifier et créer pour passer en revue vos sélections. Sélectionnez Créer pour approvisionner l’instance Azure Spring Apps.
Dans la barre d’outils, sélectionnez l’icône Notifications (en forme de cloche) pour surveiller le processus de déploiement. Une fois le déploiement terminé, vous pouvez sélectionner Épingler au tableau de bord, ce qui crée une vignette pour ce service dans votre tableau de bord du portail Azure, en tant que raccourci vers la page Vue d’ensemble du service. Sélectionnez Accéder à la ressource pour ouvrir la page Vue d’ensemble du service.
Utilisez la commande suivante pour activer le serveur Eureka. Veillez à remplacer les espaces réservés par vos propres valeurs que vous avez créées dans l’étape précédente.
az spring eureka-server enable \ --resource-group <resource-group-name> \ --name <Azure-Spring-Apps-instance-name>
3.3. Inscrire l’application Books
Cette section décrit les étapes à suivre pour inscrire une application afin d’ajouter des rôles d’application dans Microsoft Entra ID. Cette solution est utilisée pour protéger les API RESTful dans Azure Spring Apps.
Accédez à la page d’accueil du Portail Azure.
Si vous avez accès à plusieurs locataires, utilisez le filtre Répertoire + abonnement () pour sélectionner le locataire dans lequel vous voulez inscrire une application.
Recherchez et sélectionnez Microsoft Entra ID.
Sous Gérer, sélectionnez Inscriptions d’applications>Nouvelle inscription.
Entrez un nom pour votre application dans le champ Nom, par exemple Books. Les utilisateurs de votre application peuvent voir ce nom, et vous pouvez le changer ultérieurement.
Pour les Types de comptes pris en charge, sélectionnez Comptes dans cet annuaire organisationnel.
Sélectionnez Inscrire pour créer l’application.
Dans la page Vue d’ensemble de l’application, recherchez la valeur ID d’application (client) , puis notez-la pour une utilisation ultérieure. Vous en avez besoin pour configurer le fichier de configuration YAML pour ce projet.
Sous Gérer, sélectionnez Exposer une API, trouvez l’URI de l’ID d’application au début de la page, puis sélectionnez Ajouter.
Dans la page Modifier l’URI de l’ID d’application, acceptez l’URI proposé de l’ID d’application (
api://{client ID}
) ou utilisez un nom utile au lieu de l’ID client, commeapi://books
, puis sélectionnez Enregistrer.Sous Gérer, sélectionnez Rôles d’application>Créer un rôle d’application, puis entrez les informations suivantes :
- Pour Nom d’affichage, entrez Write.
- Pour Types de membres autorisés, sélectionnez Applications.
- Pour Valeur, entrez Books.Write.
- Pour Description, entrez Ajout de livres.
Répétez l’étape précédente pour ajouter un autre rôle d’application :
Books.Read
.
3.4. Inscrire l’application SPA
L’application API RESTful Books agit en tant que serveur de ressources protégé par Microsoft Entra ID. Avant d’acquérir un jeton d’accès, vous devez inscrire une autre application dans Microsoft Entra ID et accorder des autorisations à l’application cliente, nommée SPA
.
Revenez à votre locataire dans Microsoft Entra ID.
Sous Gérer, sélectionnez Inscriptions d’applications>Nouvelle inscription.
Entrez un nom pour votre application dans le champ Nom, par exemple
SPA
.Pour les Types de comptes pris en charge, utilisez les Comptes uniquement dans ce répertoire d’organisation par défaut.
Sélectionnez Inscrire pour créer l’application.
Dans la page Vue d’ensemble de l’application, recherchez la valeur ID d’application (client) , puis notez-la pour une utilisation ultérieure. Vous en avez besoin pour obtenir le jeton d'accès.
Sélectionnez Autorisations de l’API>Ajouter une autorisation>API que mon organisation utilise. Sélectionnez l’application
Books
que vous avez inscrite plus tôt, sélectionnez les autorisations Books.Read et Books.Write, puis sélectionnez Ajouter des autorisations.Sélectionnez Accorder le consentement de l’administrateur pour <votre-nom-de-locataire> afin d’accorder le consentement administrateur aux autorisations que vous avez ajoutées.
Accédez à Certificats et secrets, puis sélectionnez Nouveau secret client.
Dans la page Ajouter un secret client, entrez une description pour le secret, sélectionnez un délai d’expiration, puis sélectionnez Ajouter.
Recherchez la Valeur du secret et enregistrez-la pour une utilisation future. Vous en avez besoin pour obtenir un jeton d'accès.
3.5. Mettre à jour la configuration de l’application Books Service
Recherchez le fichier books-service/src/main/resources/application.yml pour l’application books-service
. Mettez à jour la configuration dans la section spring.cloud.azure.active-directory
pour qu’elle corresponde à l’exemple suivant. Veillez à remplacer les espaces réservés par les valeurs que vous avez créées précédemment.
spring:
cloud:
azure:
active-directory:
credential:
client-id: <your-application-ID-of-Books>
app-id-uri: <your-application-ID-URI-of-Books>
Utilisez la commande suivante pour régénérer l’échantillon de projet :
./mvnw clean package
4. Déployer les applications sur Azure Spring Apps
Les étapes suivantes vous montrent comment déployer les applications sur Azure.
4.1. Déployer les applications de microservice sur Azure Spring Apps
Utilisez les étapes suivantes pour déployer les applications sur Azure Spring Apps à l’aide du plug-in Maven pour Azure Spring Apps :
Accédez au répertoire de l’échantillon de projet et utilisez la commande suivante pour configurer l’application dans Azure Spring Apps :
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
La liste suivante décrit les interactions de commande :
- Sélectionnez des modules enfants à configurer (entrez des nombres séparés par des virgules, par exemple : [1-2,4,6], ENTRÉE pour TOUT sélectionner) : appuyez sur Entrée pour tout sélectionner.
- Connexion OAuth2 : autorisez la connexion à Azure en fonction du protocole OAuth2.
- Sélectionnez un abonnement : sélectionnez le numéro de liste d’abonnements de l’instance Azure Spring Apps créée, qui correspond par défaut au premier abonnement de la liste. Si vous utilisez le nombre par défaut, appuyez directement sur Entrée.
- Sélectionnez Azure Spring Apps pour le déploiement : sélectionnez le numéro de liste de l’instance Azure Spring Apps que vous avez créée. Si vous utilisez le nombre par défaut, appuyez directement sur Entrée.
- Sélectionnez des applications pour exposer l’accès public : (entrez des nombres séparés par des virgules, par exemple : [1-2,4,6], ENTRÉE pour sélectionner AUCUNE) : entrez 1 pour
gateway-service
. - Confirmez pour enregistrer toutes les configurations ci-dessus (Y/n) : entrez y. Si vous entrez n, la configuration n’est pas enregistrée dans les fichiers POM.
Utilisez la commande suivante pour déployer l’application :
./mvnw azure-spring-apps:deploy
La liste suivante décrit l’interaction de commande :
- Connexion OAuth2 : vous devez autoriser la connexion à Azure en fonction du protocole OAuth2.
Une fois la commande exécutée, vous pouvez voir les messages de journal suivants qui indiquent que le déploiement a réussi.
[INFO] Getting public url of app(gateway-service)... [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io ... [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated. ...
L’URL d’application de sortie est le point de terminaison de base permettant d’accéder à l’application d’API RESTful ToDo.
4.2. Exécuter localement l’application SPA
Mettez à jour la configuration dans le fichier de script de l’application SPA
spa/server.js pour qu’elle corresponde à l’exemple suivant. Veillez à remplacer les espaces réservés par vos propres valeurs que vous avez créées dans l’étape précédente.
const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"
const msalConfig = {
auth: {
clientId: "< SPA App Registration ClientId>",
authority: "https://login.microsoftonline.com/< TenantId >/",
clientSecret: "<SPA App Registration ClientSecret>",
},
};
const tokenRequest = {
scopes: ["<Application ID URI of Books>/.default"]
};
Dans le répertoire du projet de SPA, utilisez la commande suivante pour exécuter localement :
node server.js
Remarque
L’application SPA est une application web statique qui peut être déployée sur n’importe quel serveur web.
5. Valider l’application
Vous pouvez accéder à l’application SPA Books qui communique avec les API RESTful Books via l’application gateway-service
.
Accédez à
http://localhost:3000
dans votre navigateur pour accéder à l’application.Entrez des valeurs pour Auteur et Titre, puis sélectionnez Ajouter le livre. Vous voyez une réponse similaire à l’exemple suivant :
Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
6. Nettoyer les ressources
Vous pouvez supprimer le groupe de ressources Azure qui inclut toutes les ressources du groupe de ressources. Pour supprimer l’intégralité du groupe de ressources, y compris le serveur que vous venez de créer, utilisez les étapes suivantes :
Localisez votre groupe de ressources dans le portail Azure.
Sélectionnez Groupes de ressources, puis le nom de votre groupe de ressources, par exemple myresourcegroup.
Dans la page de votre groupe de ressources, sélectionnez Supprimer. Entrez le nom de votre groupe de ressources dans la zone de texte pour confirmer la suppression.
Sélectionnez Supprimer.
7. Étapes suivantes
Pour plus d’informations, consultez les articles suivants :