Skydda rest-API:et med Spring Cloud Azure

Den här handledningen visar hur du aktiverar skydd för REST API:er med Microsoft Entra ID i en Spring Boot-applikation.

I den här artikeln används ett undersökningssystem som exempel. Undersökningssystemet tillhandahåller följande REST-API:er:

  • GET /api/survey/question är till för att visa undersökningen.
  • POST /api/survey är till för att fylla i undersökningen.
  • GET /api/survey är till för att visa undersökningsresultatet.

I den här artikeln skyddar du dessa API:er genom att tillämpa rollbaserad åtkomstkontroll (RBAC) för att tillämpa följande krav:

  • GET /api/survey/question är tillgängligt för varje begäran.
  • POST /api/survey är tillgängligt för autentiserade användarbegäranden som innehåller en åtkomsttoken där SCOPE_Survey.User-behörigheten har beviljats.
  • GET /api/survey är tillgängligt för autentiserade administratörsanvändarbegäranden som innehåller en åtkomsttoken med det SCOPE_Survey.Admin beviljade omfånget.

Förutsättningar

Viktig

Spring Boot version 2.5 eller senare krävs för att slutföra stegen i den här artikeln.

Registrera REST-API:et

Använd följande steg för att registrera webb-API:et i Azure portalen.

  1. Logga in på Azure-portalen.

  2. Om du har åtkomst till flera klientorganisationer, använd filtret Katalog + prenumeration ( ) för att välja den klientorganisation i vilken du vill registrera en applikation.

  3. Leta upp och välj Microsoft Entra ID.

  4. Under Manage väljer du App registrations>Ny registrering.

  5. Ange ett namn för ditt program i fältet Namn , till exempel Api-SurveyService. Användare av din app kan se det här namnet och du kan ändra det senare.

  6. För Kontotyper som stöds väljer du Konton i valfri organisationskatalog.

  7. Välj Registrera för att skapa programmet.

  8. På appöversiktssidan letar du efter värdet program-ID (klient) och registrerar det för senare användning. Du behöver den för att konfigurera YAML-konfigurationsfilen för det här projektet.

  9. Under Hantera väljer du Exponera ett API>Lägg till ett omfång. Godkänn den föreslagna program-ID-URI:n (api://{clientId}) genom att välja Spara och fortsätta och ange sedan följande information:

    • Som Omfångsnamn anger du Survey.User.
    • För Vem kan godkännaväljer du Administratörer och användare.
    • För visningsnamn för administratörsmedgivande anger du Access the survey service as a user..
    • För Administratörsmedgivandebeskrivning, ange Allows the users to write data in survey system..
    • För Visningsnamn för användarmedgivande, anger du Access the survey service as a user..
    • För Beskrivning av användarmedgivande, anger du Allows the users to write data in survey system..
    • För Tillstånd, håll Aktiverad.
    • Välj Lägg till definitionsområde.
  10. Upprepa föregående steg för att lägga till ett annat omfång. När du väljer Lägg till ett omfånganger du följande information:

    • Som Omfångsnamn anger du Survey.Admin.
    • För Vem kan godkännaväljer du Administratörer och användare.
    • För visningsnamn för administratörsmedgivande anger du Access the survey service as a admin..
    • För Administratörsmedgivandebeskrivning, ange Allows the users to view data in survey system..
    • För Visningsnamn för användarmedgivande, anger du Access the survey service as a admin..
    • För Beskrivning av användarmedgivande, anger du Allows the users to view data in survey system..
    • För Tillstånd, håll Aktiverad.
    • Välj Lägg till definitionsområde.

Aktivera Spring Cloud Azure Starter-Microsoft Entra ID

Aktivera sedan REST API-skyddet med Spring Cloud Azure.

Lägga till säkerhetsberoenden

Om du vill installera modulen Spring Cloud Azure Starter Azure Active Directory lägger du till följande beroenden i filen pom.xml:

  • Spring Cloud Azure Materialförteckning (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>
    

    Notera

    Om du använder Spring Boot 4.0.x anger du spring-cloud-azure-dependencies versionen till 7.4.0.

    Om du använder Spring Boot 3.5.x anger du spring-cloud-azure-dependencies versionen till 6.5.0.

    Om du använder Spring Boot 3.1.x-3.5.x måste du ange spring-cloud-azure-dependencies versionen till 5.25.0.

    Om du använder Spring Boot 2.x måste du ange spring-cloud-azure-dependencies versionen till 4.20.0.

    Den här materialspecifikationen (BOM) bör konfigureras i avsnittet <dependencyManagement> i din pom.xml-fil. Detta säkerställer att alla Spring Cloud-Azure beroenden använder samma version.

    Mer information om vilken version som används för den här BOM finns genom att läsa Which Version of Spring Cloud Azure Should I Use.

  • Spring Cloud Azure Starter Microsoft Entra artefakt:

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

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

Auktorisera HTTP-begäranden

För att skydda undersökningens REST-API:er lägger du till kommentaren @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") med ett konkret omfångsnamn för att aktivera skydd, som du ser i följande exempel:

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

Uppdatera YAML-konfigurationen enligt följande exempel:

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>

Notera

I v1.0-token kräver konfigurationen klient-ID för API:et, medan du i v2.0-token kan använda klient-ID:t eller program-ID:ts URI i begäran. Du kan konfigurera båda för att slutföra målgruppsverifieringen korrekt.

Distribuera till Azure Spring Apps

När du har kört Spring Boot-programmet lokalt kan du flytta det till produktion. Azure Spring Apps gör det enkelt att distribuera Spring Boot-program till Azure utan några kodändringar. Tjänsten hanterar infrastrukturen för Spring-program så att utvecklare kan fokusera på sin kod. Azure Spring Apps tillhandahåller livscykelhantering med omfattande övervakning och diagnostik, konfigurationshantering, tjänstidentifiering, CI/CD-integrering, blågröna distributioner med mera. Mer information finns i Quickstart: Distribuera ditt första program till Azure Spring Apps.

Nästa steg