Uw REST API beveiligen met Spring Cloud Azure

In deze zelfstudie leert u hoe u REST API-beveiliging inschakelt met Microsoft Entra ID in een Spring Boot-toepassing.

In dit artikel wordt een enquêtesysteem gebruikt als voorbeeld. Het enquêtesysteem biedt de volgende REST API's:

  • GET /api/survey/question is bedoeld voor het weergeven van de enquête.
  • POST /api/survey is bedoeld voor het invullen van de enquête.
  • GET /api/survey is bedoeld voor het weergeven van het enquêteresultaat.

In dit artikel beveiligt u deze API's door op rollen gebaseerd toegangsbeheer (RBAC) toe te passen om de volgende vereisten af te dwingen:

  • GET /api/survey/question is beschikbaar voor elke aanvraag.
  • POST /api/survey is beschikbaar voor geverifieerde gebruikersaanvragen met een toegangstoken waaraan het SCOPE_Survey.User bereik is verleend.
  • GET /api/survey is beschikbaar voor geverifieerde gebruikersaanvragen van beheerders met een toegangstoken waaraan het SCOPE_Survey.Admin bereik is verleend.

Vereiste voorwaarden

Belangrijk

Spring Boot versie 2.5 of hoger is vereist om de stappen in dit artikel uit te voeren.

De REST API registreren

Gebruik de volgende stappen om uw web-API te registreren in de Azure-portal.

  1. Meld u aan bij de Azure-portal.

  2. Als u toegang hebt tot meerdere tenants, gebruikt u het filter Directory + abonnement ( ) om de tenant te selecteren waarin u een toepassing wilt registreren.

  3. Zoek en selecteer Microsoft Entra ID.

  4. Selecteer onder BeheerApp-registraties>Nieuwe registratie.

  5. Voer bijvoorbeeld een naam in voor uw toepassing in het . Gebruikers van uw app zien deze naam mogelijk en u kunt deze later wijzigen.

  6. Voor ondersteunde accounttypen selecteert u Accounts in een organisatiemap.

  7. Selecteer Registreren om de toepassing te maken.

  8. Zoek de waarde Toepassings-id (client) op de app-pagina Overzicht en noteer deze voor gebruik later. U hebt het nodig om het YAML-configuratiebestand voor dit project te configureren.

  9. Selecteer onder BeherenEen API beschikbaar maken>Een bereik toevoegen. Accepteer de voorgestelde URI voor de toepassings-id (api://{clientId}) door Opslaan en doorgaan te selecteren en voer vervolgens de volgende gegevens in:

    • Bij Bereiknaam, voer Survey.User in.
    • Voor wie toestemming kan geven, selecteert u Beheerders en gebruikers.
    • Voor beheerderstoestemming weergavenaam voert u Access the survey service as a user. in.
    • Voer de beschrijving van beheerderstoestemming in Allows the users to write data in survey system..
    • Voer voor de weergavenaam van gebruikerstoestemming het volgende in Access the survey service as a user..
    • Voer voor de beschrijving van de toestemming van de gebruiker de tekst in Allows the users to write data in survey system..
    • Houd ingeschakeld voor status.
    • Selecteer Voeg bereik toe.
  10. Herhaal de vorige stap om een ander bereik toe te voegen. Wanneer u Een bereik toevoegen selecteert, voert u de volgende gegevens in:

    • Bij Bereiknaam, voer Survey.Admin in.
    • Voor wie toestemming kan geven, selecteert u Beheerders en gebruikers.
    • Voor beheerderstoestemming weergavenaam voert u Access the survey service as a admin. in.
    • Voer de beschrijving van beheerderstoestemming in Allows the users to view data in survey system..
    • Voer voor de weergavenaam van gebruikerstoestemming het volgende in Access the survey service as a admin..
    • Voer voor de beschrijving van de toestemming van de gebruiker de tekst in Allows the users to view data in survey system..
    • Houd ingeschakeld voor status.
    • Selecteer Voeg bereik toe.

De Spring Cloud Azure Starter-Microsoft Entra ID inschakelen

Schakel vervolgens de REST API-beveiliging in met Spring Cloud Azure.

Beveiligingsafhankelijkheden toevoegen

Als u de module Spring Cloud Azure Starter Azure Active Directory wilt installeren, voegt u de volgende afhankelijkheden toe aan uw bestand pom.xml:

  • Het Spring Cloud Azure Materiaaloverzicht (BOM):

    <dependencyManagement>
      <dependencies>
        <dependency>
          <groupId>com.azure.spring</groupId>
          <artifactId>spring-cloud-azure-dependencies</artifactId>
          <version>7.4.0</version>
          <type>pom</type>
          <scope>import</scope>
        </dependency>
      </dependencies>
    </dependencyManagement>
    

    Opmerking

    Als u Spring Boot 4.0.x gebruikt, stelt u de spring-cloud-azure-dependencies versie in op 7.4.0.

    Als u Spring Boot 3.5.x gebruikt, stelt u de spring-cloud-azure-dependencies versie in op 6.5.0.

    Als u Spring Boot 3.1.x-3.5.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 5.25.0.

    Als u Spring Boot 2.x gebruikt, moet u de spring-cloud-azure-dependencies versie instellen op 4.20.0.

    Deze BOM (Bill of Material) moet worden geconfigureerd in de <dependencyManagement> sectie van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud-Azure afhankelijkheden dezelfde versie gebruiken.

    Zie Which Version of Spring Cloud Azure Should I Use voor meer informatie over de versie die voor deze BOM wordt gebruikt.

  • Het Spring Cloud Azure Starter-Microsoft Entra-artefact:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    
  • Het artefact 'Spring Boot Starter OAuth2 Resource Server':

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
    </dependency>
    

HTTP-aanvragen autoriseren

Als u de REST API's van de enquête wilt beveiligen, voegt u de aantekening @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") toe met een concrete bereiknaam om beveiliging mogelijk te maken, zoals wordt weergegeven in het volgende voorbeeld:

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;
    }
}

Werk de YAML-configuratie bij zoals wordt weergegeven in het volgende voorbeeld:

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>

Opmerking

In v1.0-tokens is voor de configuratie de client-id van de API vereist, terwijl u in v2.0-tokens de client-id of de URI van de toepassings-id in de aanvraag kunt gebruiken. U kunt beide configureren om de validatie van de doelgroep correct te voltooien.

Implementeren in Azure Spring Apps

Nadat u de Spring Boot-toepassing lokaal hebt uitgevoerd, kunt u deze verplaatsen naar productie. Azure Spring Apps maakt het eenvoudig om Spring Boot-toepassingen te implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met behulp van uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Quickstart: Uw eerste toepassing implementeren in Azure Spring Apps voor meer informatie.

Volgende stappen