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 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/questiondient zum Anzeigen der Umfrage. -
POST /api/surveydient zum Ausfüllen der Umfrage. -
GET /api/surveydient 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/questionist für jede Anforderung verfügbar. -
POST /api/surveyist für authentifizierte Benutzeranforderungen verfügbar, die ein Zugriffstoken mit dem gewährtenSCOPE_Survey.UserUmfang enthalten. -
GET /api/surveyist für Anfragen von authentifizierten Administratoren verfügbar, die ein Zugriffstoken mit dem gewährtenSCOPE_Survey.Admin-Bereich enthalten.
Voraussetzungen
- Ein Azure-Abonnement – create one for free.
- Java Development Kit (JDK) Version 8 oder höher.
- Apache Maven
- Azure CLI
- Eine Microsoft Entra Instanz. Anweisungen zum Erstellen eines Mandanten finden Sie unter Quickstart: Erstellen eines neuen Mandanten in Microsoft Entra ID.
- Eine Spring Boot-Anwendung. Wenn Sie keines haben, erstellen Sie mit Spring Initializr ein Maven-Projekt. Wählen Sie das Maven-Projekt aus, und fügen Sie unter Abhängigkeiten die Abhängigkeiten Spring Web, OAuth2-Ressourcenserver und Microsoft Entra ID hinzu, und wählen Sie dann Java-Version 8 oder höher.
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 portal Azure 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 und wählen Sie Microsoft Entra ID aus.
Wählen Sie unter ManageApp registrations>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. 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.Userein. - 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.
- Für Bereichsname geben Sie
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.Adminein. - 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.
- Für Bereichsname geben Sie
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-dependenciesVersion auf7.1.0festlegen.Wenn Sie Spring Boot 3.5.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf6.1.0festlegen.Wenn Sie Spring Boot 3.1.x-3.5.x verwenden, stellen Sie sicher, dass Sie die Version
spring-cloud-azure-dependenciesauf5.25.0setzen.Wenn Sie Spring Boot 2.x verwenden, stellen Sie sicher, dass Sie die
spring-cloud-azure-dependenciesVersion auf4.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 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.