Zabezpieczanie interfejsu API REST przy użyciu usługi Spring Cloud Azure

W tym samouczku pokazano, jak włączyć ochronę API REST przy użyciu Microsoft Entra ID w aplikacji Spring Boot.

W tym artykule użyto systemu ankiety jako przykładu. System ankiety udostępnia następujące interfejsy API REST:

  • GET /api/survey/question służy do wyświetlania ankiety.
  • POST /api/survey jest przeznaczony do wypełnienia ankiety.
  • GET /api/survey służy do wyświetlania wyniku ankiety.

W tym artykule chronisz te interfejsy API, stosując kontrolę dostępu opartą na rolach (RBAC), aby wymusić następujące wymagania:

  • GET /api/survey/question jest dostępny dla każdego żądania.
  • POST /api/survey Jest dostępny dla uwierzytelnionych żądań użytkowników zawierających token dostępu z udzielonym zakresem SCOPE_Survey.User .
  • GET /api/survey Jest dostępny dla żądań uwierzytelnionych użytkowników administracyjnych zawierających token dostępu z zakresem SCOPE_Survey.Admin przyznanym.

Wymagania wstępne

Ważne

Do wykonania kroków opisanych w tym artykule jest wymagany program Spring Boot w wersji 2.5 lub nowszej.

Rejestrowanie interfejsu API REST

Wykonaj poniższe kroki, aby zarejestrować internetowy interfejs API w portalu Azure.

  1. Zaloguj się do portalu Azure.

  2. Jeśli masz dostęp do wielu dzierżaw, użyj filtru Katalog i subskrypcja ( ), aby wybrać dzierżawę, w której chcesz zarejestrować aplikację.

  3. Znajdź i wybierz Microsoft Entra ID.

  4. W obszarze Manage wybierz Rejestracje aplikacji>Nowa rejestracja.

  5. Wprowadź nazwę aplikacji w polu Nazwa , na przykład Api-SurveyService. Użytkownicy aplikacji mogą zobaczyć tę nazwę i możesz ją zmienić później.

  6. W obszarze Obsługiwane typy kont wybierz pozycję Konta w dowolnym katalogu organizacyjnym.

  7. Wybierz pozycję Zarejestruj, aby utworzyć aplikację.

  8. Na stronie Przegląd aplikacji znajdź wartość identyfikator aplikacji (klienta), a następnie zapisz ją do późniejszego użycia. Potrzebny jest go do skonfigurowania pliku konfiguracji YAML dla tego projektu.

  9. W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API>Dodaj zakres. Zaakceptuj proponowany identyfikator URI aplikacji (api://{clientId}), wybierając Zapisz i kontynuuj, a następnie wprowadź następujące informacje:

    • W polu Nazwa zakresu wprowadź wartość Survey.User.
    • W obszarze Kto może wyrazić zgodę, wybierz pozycję Administratorzy i użytkownicy.
    • W polu Nazwa wyświetlana zgody administratora wprowadź Access the survey service as a user..
    • W polu Opis zgody administratora wprowadź Allows the users to write data in survey system..
    • W polu Nazwa wyświetlana zgody użytkownika wprowadź .Access the survey service as a user.
    • W polu Opis zgody użytkownika wprowadźAllows the users to write data in survey system..
    • W obszarze Stan zachowaj wartość Włączone.
    • Wybierz Dodaj zakres.
  10. Powtórz poprzedni krok, aby dodać kolejny zakres. Po wybraniu pozycji Dodaj zakres wprowadź następujące informacje:

    • W polu Nazwa zakresu wprowadź wartość Survey.Admin.
    • W obszarze Kto może wyrazić zgodę, wybierz pozycję Administratorzy i użytkownicy.
    • W polu Nazwa wyświetlana zgody administratora wprowadź Access the survey service as a admin..
    • W polu Opis zgody administratora wprowadź Allows the users to view data in survey system..
    • W polu Nazwa wyświetlana zgody użytkownika wprowadź .Access the survey service as a admin.
    • W polu Opis zgody użytkownika wprowadźAllows the users to view data in survey system..
    • W obszarze Stan zachowaj wartość Włączone.
    • Wybierz Dodaj zakres.

Włącz starter Spring Cloud Azure dla Microsoft Entra ID

Następnie włącz ochronę interfejsu API REST przy użyciu usługi Spring Cloud Azure.

Dodaj zależności zabezpieczeń

Aby zainstalować moduł Spring Cloud Azure Starter Azure Active Directory, dodaj następujące zależności do pliku pom.xml:

  • Projekt Spring Cloud Azure Bill of Materials (BOM):

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

    Uwaga

    Jeśli używasz platformy Spring Boot 4.0.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 7.3.0.

    Jeśli używasz platformy Spring Boot 3.5.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 6.4.0.

    Jeśli używasz platformy Spring Boot 3.1.x-3.5.x, pamiętaj, aby ustawić spring-cloud-azure-dependencies wersję na 5.25.0.

    Jeśli używasz środowiska Spring Boot 2.x, ustaw wersję spring-cloud-azure-dependencies na 4.20.0.

    Tę listę materiałów (BOM) należy skonfigurować w sekcji <dependencyManagement> pliku pom.xml. Dzięki temu wszystkie zależności usługi Spring Cloud Azure korzystają z tej samej wersji.

    Aby uzyskać więcej informacji na temat wersji używanej w tym BOM, zobacz Którą wersję Spring Cloud Azure powinienem użyć?.

  • Artefakt startowej Azure Spring Cloud Microsoft Entra:

    <dependency>
      <groupId>com.azure.spring</groupId>
      <artifactId>spring-cloud-azure-starter-active-directory</artifactId>
    </dependency>
    
  • Artefakt serwera zasobów OAuth2 startowego środowiska Spring Boot:

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

Autoryzowanie żądań HTTP

Aby chronić interfejsy API REST ankiety, dodaj adnotację @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") z konkretną nazwą zakresu w celu włączenia ochrony, jak pokazano w poniższym przykładzie:

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

Zaktualizuj konfigurację YAML, jak pokazano w poniższym przykładzie:

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>

Uwaga

W tokenach w wersji 1.0 konfiguracja wymaga identyfikatora klienta interfejsu API, natomiast w tokenach w wersji 2.0 można użyć identyfikatora klienta lub identyfikatora URI aplikacji w żądaniu. Oba te elementy można skonfigurować tak, aby prawidłowo ukończyć walidację odbiorców.

Wdrażanie do Azure Spring Apps

Po uruchomieniu aplikacji Spring Boot lokalnie możesz przenieść ją do środowiska produkcyjnego. Azure Spring Apps ułatwia wdrażanie aplikacji Spring Boot w Azure bez żadnych zmian w kodzie. Usługa zarządza infrastrukturą aplikacji Spring, aby deweloperzy mogli skupić się na swoim kodzie. Azure Spring Apps zapewnia zarządzanie cyklem życia przy użyciu kompleksowego monitorowania i diagnostyki, zarządzania konfiguracją, odnajdywania usług, integracji CI/CD, wdrożeń blue-green i nie tylko. Aby uzyskać więcej informacji, zobacz Quickstart: Wdrażanie pierwszej aplikacji w Azure Spring Apps.

Następne kroki