Freigeben über


Sichern Ihrer REST-API mit Spring Cloud Azure

In dieser Anleitung erfahren Sie, wie Sie den Schutz der REST-APIs 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 Azure-Portal 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 Sie nach Microsoft Entra ID und wählen Sie sie aus.

  4. Wählen Sie unter Verwalten die Option App-Registrierungen>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. Übernehmen Sie den vorgeschlagenen Anwendungs-ID-URI (api://{clientId}), indem Sie Speichern und fortfahren auswählen. Geben Sie dann die folgenden Informationen ein:

    • Geben Sie im Feld Bereichsname den Namen 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.
    • Übernehmen Sie Aktiviert als Status.
    • 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:

    • Geben Sie im Feld Bereichsname den Namen 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.
    • Übernehmen Sie Aktiviert als Status.
    • Wählen Sie Bereich hinzufügen aus.

Aktivieren der Microsoft Entra-ID für Spring Cloud Azure Starter

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

Hinzufügen von Sicherheitsabhängigkeiten

Zum Installieren des Azure Active Directory-Moduls "Spring Cloud Azure Starter" fügen Sie Ihrer pom.xml Datei die folgenden Abhängigkeiten hinzu:

  • Die Spring Cloud Azure-Stückliste (BOM):

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

    Anmerkung

    Wenn Sie Spring Boot 2.x verwenden, müssen Sie unbedingt die spring-cloud-azure-dependencies Version auf 4.20.0festlegen. 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 zu der version, die für diese BOM verwendet wird, finden Sie unter Welche Version von Spring Cloud Azure sollte ichverwenden.

  • 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 in 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 eine Lebenszyklusverwaltung mit umfassender Überwachung und Diagnose, Konfigurationsverwaltung, Dienstermittlung, CI/CD-Integration, Blau/Grün-Bereitstellungen u. v. m. Weitere Informationen finden Sie unter Schnellstart: Bereitstellen Ihrer ersten Anwendung in Azure Spring Apps.

Nächste Schritte