Remarque
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/questionest destiné à l’affichage de l’enquête. -
POST /api/surveyest destiné à remplir l’enquête. -
GET /api/surveyest 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/questionest disponible pour chaque requête. -
POST /api/surveyest disponible pour les demandes d’utilisateur authentifiées contenant un jeton d’accès avec l’étendueSCOPE_Survey.Useraccordée. -
GET /api/surveyest disponible pour les demandes d’utilisateur administrateur authentifiées contenant un jeton d’accès avec l’étendueSCOPE_Survey.Adminaccordée.
Conditions préalables
- Un abonnement Azure - créez-en un gratuitement.
- Java Kit de développement (JDK) version 8 ou ultérieure.
- Apache Maven
- Azure CLI
- Une instance de Microsoft Entra. Pour obtenir des instructions sur la création d’un locataire, consultez Quickstart : Créer un locataire dans Microsoft Entra ID.
- Une application Spring Boot. Si vous n’en avez pas, créez un projet Maven avec Spring Initializr. Veillez à sélectionner Maven Project et, sous Dependencies, ajoutez les dépendances Spring Web, OAuth2 Resource Server et Microsoft Entra ID, 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.
Connectez-vous au 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 Manage, sélectionnez inscriptions d'applications>New registration.
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 les types de comptes pris en charge, sélectionnez Comptes dans n’importe quel 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 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 portée, 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 portée, 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 portée, 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 portée, entrez
Activer le Microsoft Entra ID 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 :
La nomenclature Spring Cloud Azure (BOM) :
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.2.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Remarque
Si vous utilisez Spring Boot 4.0.x, veillez à mettre la
spring-cloud-azure-dependenciesversion à7.2.0.Si vous utilisez Spring Boot 3.5.x, assurez-vous de définir la version
spring-cloud-azure-dependenciesà6.2.0.Si vous utilisez Spring Boot 3.1.x-3.5.x, veillez à définir la version
spring-cloud-azure-dependencies5.25.0.Si vous utilisez Spring Boot 2.x, assurez-vous de définir la version
spring-cloud-azure-dependenciessur4.20.0.Cette liste de matériel (BOM) doit être configurée dans la section
<dependencyManagement>de votre fichier pom.xml. Cela garantit que toutes les dépendances spring Cloud Azure utilisent la même version.Pour plus d’informations sur la version utilisée pour ce boM, consultez Which Version of Spring Cloud Azure Should I Use.
L'artefact Microsoft Entra Spring Cloud Azure Starter :
<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 supervision 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 Quickstart : Déployer votre première application sur Azure Spring Apps.