Partager via


Sécuriser votre API REST à l’aide de Spring Cloud Azure

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’étendue SCOPE_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’étendue SCOPE_Survey.Admin accordée.

Conditions préalables

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.

  1. Connectez-vous au portail Azure .

  2. Si vous avez accès à plusieurs locataires, utilisez le filtre Annuaire + abonnement () pour sélectionner le locataire dans lequel vous souhaitez enregistrer une demande.

  3. Recherchez et sélectionnez Microsoft Entra ID.

  4. Sous Gérer, sélectionnez Inscriptions d’applications>Nouvelle inscription.

  5. 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.

  6. Pour Types de comptes pris en charge, sélectionnez Comptes dans un annuaire organisationnel.

  7. Sélectionnez Inscrire pour créer l’application.

  8. 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.

  9. 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.
  10. 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.

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 sur 4.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.

Étapes suivantes