Freigeben über


Sichern Sie Ihre REST-API mit Spring Cloud Azure ab

In diesem Lernprogramm erfahren Sie, wie Sie den REST-APIs-Schutz mit Microsoft Entra ID in einer Spring Boot-Anwendung aktivieren.

In diesem Artikel wird ein Umfragesystem als Beispiel verwendet. Das Umfragesystem stellt die folgenden REST-APIs bereit:

  • GET /api/survey/question dient zum Anzeigen der Umfrage.
  • POST /api/survey dient zum Ausfüllen der Umfrage.
  • GET /api/survey dient zum Anzeigen des Umfrageergebnisses.

In diesem Artikel schützen Sie diese APIs, indem Sie die rollenbasierte Zugriffssteuerung (RBAC) anwenden, um die folgenden Anforderungen zu erzwingen:

  • GET /api/survey/question ist für jede Anforderung verfügbar.
  • POST /api/survey ist für authentifizierte Benutzeranforderungen verfügbar, die ein Zugriffstoken mit dem gewährten SCOPE_Survey.User Umfang enthalten.
  • GET /api/survey ist für Anfragen von authentifizierten Administratoren verfügbar, die ein Zugriffstoken mit dem gewährten SCOPE_Survey.Admin-Bereich enthalten.

Voraussetzungen

Wichtig

Spring Boot Version 2.5 oder höher ist erforderlich, um die Schritte in diesem Artikel auszuführen.

Registrieren der REST-API

Führen Sie die folgenden Schritte aus, um Ihre Web-API im Azure-Portal zu registrieren.

  1. Melden Sie sich beim portal Azure an.

  2. Wenn Sie Zugriff auf mehrere Mandanten haben, verwenden Sie den Filter Verzeichnis und Abonnement (), um den Mandanten auszuwählen, für den Sie eine Anwendung registrieren möchten.

  3. Suchen und wählen Sie Microsoft Entra ID aus.

  4. Wählen Sie unter ManageApp registrations>Neue Registrierung aus.

  5. Geben Sie einen Namen für Ihre Anwendung in das Feld Name ein, z. B. Api-SurveyService. Benutzer Ihrer App sehen diesen Namen möglicherweise, und Sie können ihn später ändern.

  6. Wählen Sie unter Unterstützte Kontotypen die Option Konten in einem beliebigen Organisationsverzeichnis aus.

  7. Wählen Sie Registrieren aus, um die Anwendung zu erstellen.

  8. Suchen Sie auf der Übersicht-Seite der App nach dem Wert der Anwendungs-ID (Client) und notieren Sie ihn zur späteren Verwendung. Sie benötigen sie, um die YAML-Konfigurationsdatei für dieses Projekt zu konfigurieren.

  9. Wählen Sie unter Verwalten die Optionen Eine API verfügbar machen>Bereich hinzufügen aus. Akzeptieren Sie den vorgeschlagenen Anwendungs-ID-URI (api://{clientId}), indem Sie "Speichern" auswählen und den Vorgang fortsetzen, und geben Sie dann die folgenden Informationen ein:

    • Für Bereichsname geben Sie Survey.User ein.
    • Wählen Sie bei Wer kann zustimmen die Option Administratoren und Benutzer aus.
    • Geben Sie unter Anzeigename der Administratoreinwilligung den Namen Access the survey service as a user. ein.
    • Geben Sie unter Beschreibung der Administratoreinwilligung den Text Allows the users to write data in survey system. ein.
    • Geben Sie unter Anzeigename der Benutzereinwilligung den Namen Access the survey service as a user. ein.
    • Geben Sie unter Beschreibung der Benutzereinwilligung den Text Allows the users to write data in survey system. ein.
    • Für Status belassen Sie Aktiviert.
    • Wählen Sie "Bereich hinzufügen" aus.
  10. Wiederholen Sie den vorherigen Schritt, um einen anderen Bereich hinzuzufügen. Wenn Sie Bereich hinzufügen auswählen, geben Sie die folgenden Informationen ein:

    • Für Bereichsname geben Sie Survey.Admin ein.
    • Wählen Sie bei Wer kann zustimmen die Option Administratoren und Benutzer aus.
    • Geben Sie unter Anzeigename der Administratoreinwilligung den Namen Access the survey service as a admin. ein.
    • Geben Sie unter Beschreibung der Administratoreinwilligung den Text Allows the users to view data in survey system. ein.
    • Geben Sie unter Anzeigename der Benutzereinwilligung den Namen Access the survey service as a admin. ein.
    • Geben Sie unter Beschreibung der Benutzereinwilligung den Text Allows the users to view data in survey system. ein.
    • Für Status belassen Sie Aktiviert.
    • Wählen Sie "Bereich hinzufügen" aus.

Aktivieren Sie den Spring Cloud Azure Starter für Microsoft Entra ID

Aktivieren Sie als Nächstes den REST-API-Schutz mit Spring Cloud Azure.

Hinzufügen von Sicherheitsabhängigkeiten

Um das Spring Cloud Azure Starter Azure Active Directory Modul zu installieren, fügen Sie die folgenden Abhängigkeiten zur Datei pom.xml hinzu:

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

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

    Anmerkung

    Wenn Sie Spring Boot 4.0.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 7.1.0festlegen.

    Wenn Sie Spring Boot 3.5.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 6.1.0festlegen.

    Wenn Sie Spring Boot 3.1.x-3.5.x verwenden, stellen Sie sicher, dass Sie die Version spring-cloud-azure-dependencies auf 5.25.0 setzen.

    Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die spring-cloud-azure-dependencies Version auf 4.20.0 festlegen.

    Diese Stückliste (Bill of Material, BOM) sollte im Abschnitt <dependencyManagement> Ihrer pom.xml Datei konfiguriert werden. Dadurch wird sichergestellt, dass alle Spring Cloud-Azure Abhängigkeiten dieselbe Version verwenden.

    Weitere Informationen zur version, die für diese BOM verwendet wird, finden Sie unter Which Version of Spring Cloud Azure Should I Use.

  • Das Spring Cloud Azure Starter Microsoft Entra Artefakt:

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

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

Autorisieren von HTTP-Anforderungen

Um die REST-APIs der Umfrage zu schützen, fügen Sie die Anmerkung @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") mit einem konkreten Bereichsnamen hinzu, um den Schutz zu ermöglichen, wie im folgenden Beispiel gezeigt:

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

Aktualisieren Sie die YAML-Konfiguration wie im folgenden Beispiel gezeigt:

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>

Anmerkung

In v1.0-Token erfordert die Konfiguration die Client-ID der API, während Sie in v2.0-Token die Client-ID oder den Anwendungs-ID-URI in der Anforderung verwenden können. Sie können beide konfigurieren, um die Zielgruppenvalidierung ordnungsgemäß abzuschließen.

Bereitstellen in Azure Spring Apps

Nachdem Sie die Spring Boot-Anwendung lokal ausgeführt haben, können Sie sie in die Produktionsumgebung übertragen. Azure Spring Apps erleichtert die Bereitstellung von Spring Boot-Anwendungen auf Azure ohne Codeänderungen. Der Dienst verwaltet die Infrastruktur von Spring-Anwendungen, damit Entwickler sich auf ihren Code konzentrieren können. Azure Spring Apps bietet Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, blaugrünen Bereitstellungen und mehr. Weitere Informationen finden Sie unter Quickstart: Bereitstellen Ihrer ersten Anwendung für Azure Spring Apps.

Nächste Schritte