Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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ährtenSCOPE_Survey.User
Umfang enthalten.GET /api/survey
ist für Anfragen von authentifizierten Administratoren verfügbar, die ein Zugriffstoken mit dem gewährtenSCOPE_Survey.Admin
-Bereich enthalten.
Voraussetzungen
- Ein Azure-Abonnement – erstellen Sie eines kostenlos.
- Java Development Kit (JDK) Version 8 oder höher.
- Apache Maven
- Azure-Befehlszeilenschnittstelle
- Eine Microsoft Entra-Instanz. Anweisungen zum Erstellen eines Mandanten finden Sie unter Schnellstart: Erstellen eines neuen Mandanten in Microsoft Entra ID.
- Eine Spring Boot-Anwendung. Wenn Sie noch keines haben, erstellen Sie ein Maven-Projekt mit dem Spring Initializr. Wählen Sie Maven Project aus, und fügen Sie unter Abhängigkeiten die Spring Web-, OAuth2 Resource Server- und Microsoft Entra ID-Abhängigkeiten hinzu, und wählen Sie dann Java Version 8 oder höher aus.
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.
Melden Sie sich beim Azure-Portal an.
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.
Suchen Sie nach Microsoft Entra ID und wählen Sie sie aus.
Wählen Sie unter Verwalten die Option App-Registrierungen>Neue Registrierung aus.
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.Wählen Sie unter Unterstützte Kontotypen die Option Konten in einem beliebigen Organisationsverzeichnis aus.
Wählen Sie Registrieren aus, um die Anwendung zu erstellen.
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.
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.
- Geben Sie im Feld Bereichsname den Namen
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.
- Geben Sie im Feld Bereichsname den Namen
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 auf4.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 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.