Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Ce tutoriel vous montre comment activer la protection des API REST avec Microsoft Entra ID dans une application Spring Boot.
Cet article utilise un système d’enquête comme exemple. Le système d’enquête fournit les API REST suivantes :
GET /api/survey/question
est destiné à l’affichage de l’enquête.POST /api/survey
est destiné à remplir l’enquête.GET /api/survey
est destiné à afficher le résultat de l’enquête.
Dans cet article, vous protégez ces API en appliquant le contrôle d’accès en fonction du rôle (RBAC) pour appliquer les exigences suivantes :
GET /api/survey/question
est disponible pour chaque requête.POST /api/survey
est disponible pour les demandes d’utilisateur authentifiées contenant un jeton d’accès avec l’étendueSCOPE_Survey.User
accordée.GET /api/survey
est disponible pour les demandes d’utilisateur administrateur authentifiées contenant un jeton d’accès avec l’étendueSCOPE_Survey.Admin
accordée.
Conditions préalables
- Un abonnement Azure - en créer un gratuitement.
- Kit de développement Java (JDK) version 8 ou ultérieure.
- Apache Maven
- Azure CLI
- Une instance Microsoft Entra. Pour obtenir des instructions sur la création d’un locataire, consultez Démarrage rapide : Créer un locataire dans Microsoft Entra ID.
- Une application Spring Boot. Si vous n’en avez pas, créez un projet Maven avec le Spring Initializr. Veillez à sélectionner projet Maven et, sous dépendances, ajoutez Spring Web, OAuth2 Resource Server, et Microsoft Entra ID comme dépendances, puis sélectionnez Java version 8 ou ultérieure.
Importante
Spring Boot version 2.5 ou ultérieure est nécessaire pour effectuer les étapes décrites dans cet article.
Inscrire l’API REST
Procédez comme suit pour inscrire votre API web dans le portail Azure.
Si vous avez accès à plusieurs locataires, utilisez le filtre Annuaire + abonnement (
) pour sélectionner le locataire dans lequel vous souhaitez enregistrer une demande.
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 . Les utilisateurs de votre application peuvent voir ce nom et vous pouvez le modifier ultérieurement. Pour Types de comptes pris en charge, sélectionnez Comptes dans un annuaire organisationnel.
Sélectionnez Inscrire pour créer l’application.
Dans la page Vue d’ensemble de l’application, recherchez la valeur de l'ID de l’application (client) , puis enregistrez-la pour une utilisation ultérieure. Vous devez configurer le fichier de configuration YAML pour ce projet.
Sous Gérer, sélectionnez Exposer une API>Ajouter une étendue. Acceptez l’URI d’ID d’application proposé (
api://{clientId}
) en sélectionnant Enregistrer et continuer, puis entrez les informations suivantes :- Pour Nom de l’étendue, entrez
Survey.User
. - Pour la rubrique Qui peut consentir, sélectionnez Administrateurs et utilisateurs.
- Pour Nom d’affichage du consentement administrateur, saisissez
Access the survey service as a user.
. - Pour Description du consentement administrateur, saisissez
Allows the users to write data in survey system.
. - Pour Nom d’affichage du consentement de l’utilisateur, saisissez
Access the survey service as a user.
. - Pour Description du consentement de l’utilisateur, saisissez
Allows the users to write data in survey system.
. - Pour État, conservez Activé.
- Sélectionnez Ajouter une étendue.
- Pour Nom de l’étendue, entrez
Répétez l’étape précédente pour ajouter une autre étendue. Lorsque vous sélectionnez Ajouter une étendue, entrez les informations suivantes :
- Pour Nom de l’étendue, entrez
Survey.Admin
. - Pour la rubrique Qui peut consentir, sélectionnez Administrateurs et utilisateurs.
- Pour Nom d’affichage du consentement administrateur, saisissez
Access the survey service as a admin.
. - Pour Description du consentement administrateur, saisissez
Allows the users to view data in survey system.
. - Pour Nom d’affichage du consentement de l’utilisateur, saisissez
Access the survey service as a admin.
. - Pour Description du consentement de l’utilisateur, saisissez
Allows the users to view data in survey system.
. - Pour État, conservez Activé.
- Sélectionnez Ajouter une étendue.
- Pour Nom de l’étendue, entrez
Activer l’ID Microsoft Entra de Spring Cloud Azure Starter
Ensuite, activez la protection de l’API REST avec Spring Cloud Azure.
Ajouter des dépendances de sécurité
Pour installer le module Spring Cloud Azure Starter Azure Active Directory, ajoutez les dépendances suivantes à votre fichier pom.xml :
Le Bill of Materials (BOM) de Spring Cloud Azure :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>5.22.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
Remarque
Si vous utilisez Spring Boot 2.x, veillez à définir la version
spring-cloud-azure-dependencies
sur4.20.0
. Cette bill of Material (BOM) doit être configurée dans la section<dependencyManagement>
de votre fichier pom.xml. Cela garantit que toutes les dépendances Azure Spring Cloud utilisent la même version. Pour plus d’informations sur la version utilisée pour ce boM, consultez Quelle version de Spring Cloud Azure dois-je utiliser.Artefact Spring Cloud Azure Starter Microsoft Entra :
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>
Artefact du serveur de ressources OAuth2 Spring Boot Starter :
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Autoriser les requêtes HTTP
Pour protéger les API REST d’enquête, ajoutez l’annotation @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')")
avec un nom d’étendue concret pour activer la protection, comme illustré dans l’exemple suivant :
import org.springframework.http.MediaType;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/api/survey")
public class SurveyController {
private static final String QUESTION = "Which sports do you like most?";
private final Map<LocalDateTime, String> surveys = new LinkedHashMap<>();
@GetMapping(value = "/question", produces = MediaType.APPLICATION_JSON_VALUE)
public String question() {
return QUESTION;
}
@PostMapping
@PreAuthorize("hasAuthority('SCOPE_Survey.User')")
public String addAnswer(@RequestParam("answer") String answer) {
if (StringUtils.hasText(answer)) {
surveys.put(LocalDateTime.now(), answer);
return "succeeded";
}
return "Failed";
}
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@PreAuthorize("hasAuthority('SCOPE_Survey.Admin')")
public Map<LocalDateTime, String> list() {
return surveys;
}
}
Mettez à jour la configuration YAML comme indiqué dans l’exemple suivant :
spring:
cloud:
azure:
active-directory:
enabled: true
credential:
client-id: <your-application-ID-of-Api-SurveyService>
app-id-uri: <your-application-ID-URI-of-Api-SurveyService>
Remarque
Dans les jetons v1.0, la configuration nécessite l’ID client de l’API, tandis que dans les jetons v2.0, vous pouvez utiliser l’ID client ou l’URI d’ID d’application dans la requête. Vous pouvez configurer les deux pour effectuer correctement la validation de l’audience.
Déployer sur Azure Spring Apps
Une fois l’application Spring Boot exécutée localement, vous pouvez la déplacer en production. Azure Spring Apps facilite le déploiement d’applications Spring Boot sur Azure sans aucune modification du code. Le service gère l’infrastructure des applications Spring afin que les développeurs puissent se concentrer sur leur code. Azure Spring Apps fournit une gestion du cycle de vie à l’aide de la surveillance et des diagnostics complets, de la gestion de la configuration, de la découverte de services, de l’intégration CI/CD, des déploiements bleu-vert, etc. Pour plus d’informations, consultez Démarrage rapide : Déployer votre première application sur Azure Spring Apps.