Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In deze zelfstudie leert u hoe u REST API-beveiliging inschakelt met Microsoft Entra ID in een Spring Boot-toepassing.
In dit artikel wordt een enquêtesysteem gebruikt als voorbeeld. Het enquêtesysteem biedt de volgende REST API's:
-
GET /api/survey/questionis bedoeld voor het weergeven van de enquête. -
POST /api/surveyis bedoeld voor het invullen van de enquête. -
GET /api/surveyis bedoeld voor het weergeven van het enquêteresultaat.
In dit artikel beveiligt u deze API's door op rollen gebaseerd toegangsbeheer (RBAC) toe te passen om de volgende vereisten af te dwingen:
-
GET /api/survey/questionis beschikbaar voor elke aanvraag. -
POST /api/surveyis beschikbaar voor geverifieerde gebruikersaanvragen met een toegangstoken waaraan hetSCOPE_Survey.Userbereik is verleend. -
GET /api/surveyis beschikbaar voor geverifieerde gebruikersaanvragen van beheerders met een toegangstoken waaraan hetSCOPE_Survey.Adminbereik is verleend.
Vereiste voorwaarden
- Een Azure-abonnement- gratis een abonnement maken.
- Java Development Kit (JDK) versie 8 of hoger.
- Apache Maven
- Azure CLI
- Een Microsoft Entra-exemplaar. Zie Quickstart: Een nieuwe tenant maken in Microsoft Entra ID voor instructies over het maken van een tenant.
- Een Spring Boot-toepassing. Als u er nog geen hebt, maakt u een Maven-project met de Spring Initializr. Selecteer Maven Project en selecteer onder Afhankelijkheden, voeg de Spring Web, OAuth2-resourceserver en Microsoft Entra ID afhankelijkheden toe en selecteer vervolgens Java versie 8 of hoger.
Belangrijk
Spring Boot versie 2.5 of hoger is vereist om de stappen in dit artikel uit te voeren.
De REST API registreren
Gebruik de volgende stappen om uw web-API te registreren in de Azure-portal.
Meld u aan bij de Azure-portal.
Als u toegang hebt tot meerdere tenants, gebruikt u het filter Directory + abonnement (
) om de tenant te selecteren waarin u een toepassing wilt registreren.Zoek en selecteer Microsoft Entra ID.
Selecteer onder BeheerApp-registraties>Nieuwe registratie.
Voer bijvoorbeeld een naam in voor uw toepassing in het . Gebruikers van uw app zien deze naam mogelijk en u kunt deze later wijzigen.
Voor ondersteunde accounttypen selecteert u Accounts in een organisatiemap.
Selecteer Registreren om de toepassing te maken.
Zoek de waarde Toepassings-id (client) op de app-pagina Overzicht en noteer deze voor gebruik later. U hebt het nodig om het YAML-configuratiebestand voor dit project te configureren.
Selecteer onder BeherenEen API beschikbaar maken>Een bereik toevoegen. Accepteer de voorgestelde URI voor de toepassings-id (
api://{clientId}) door Opslaan en doorgaan te selecteren en voer vervolgens de volgende gegevens in:- Bij Bereiknaam, voer
Survey.Userin. - Voor wie toestemming kan geven, selecteert u Beheerders en gebruikers.
- Voor beheerderstoestemming weergavenaam voert u
Access the survey service as a user.in. - Voer de beschrijving van beheerderstoestemming in
Allows the users to write data in survey system.. - Voer voor de weergavenaam van gebruikerstoestemming het volgende in
Access the survey service as a user.. - Voer voor de beschrijving van de toestemming van de gebruiker de tekst in
Allows the users to write data in survey system.. - Houd ingeschakeld voor status.
- Selecteer Voeg bereik toe.
- Bij Bereiknaam, voer
Herhaal de vorige stap om een ander bereik toe te voegen. Wanneer u Een bereik toevoegen selecteert, voert u de volgende gegevens in:
- Bij Bereiknaam, voer
Survey.Adminin. - Voor wie toestemming kan geven, selecteert u Beheerders en gebruikers.
- Voor beheerderstoestemming weergavenaam voert u
Access the survey service as a admin.in. - Voer de beschrijving van beheerderstoestemming in
Allows the users to view data in survey system.. - Voer voor de weergavenaam van gebruikerstoestemming het volgende in
Access the survey service as a admin.. - Voer voor de beschrijving van de toestemming van de gebruiker de tekst in
Allows the users to view data in survey system.. - Houd ingeschakeld voor status.
- Selecteer Voeg bereik toe.
- Bij Bereiknaam, voer
De Spring Cloud Azure Starter-Microsoft Entra ID inschakelen
Schakel vervolgens de REST API-beveiliging in met Spring Cloud Azure.
Beveiligingsafhankelijkheden toevoegen
Als u de module Spring Cloud Azure Starter Azure Active Directory wilt installeren, voegt u de volgende afhankelijkheden toe aan uw bestand pom.xml:
Het Spring Cloud Azure Materiaaloverzicht (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.4.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Opmerking
Als u Spring Boot 4.0.x gebruikt, stelt u de
spring-cloud-azure-dependenciesversie in op7.4.0.Als u Spring Boot 3.5.x gebruikt, stelt u de
spring-cloud-azure-dependenciesversie in op6.5.0.Als u Spring Boot 3.1.x-3.5.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op5.25.0.Als u Spring Boot 2.x gebruikt, moet u de
spring-cloud-azure-dependenciesversie instellen op4.20.0.Deze BOM (Bill of Material) moet worden geconfigureerd in de
<dependencyManagement>sectie van uw pom.xml-bestand. Dit zorgt ervoor dat alle Spring Cloud-Azure afhankelijkheden dezelfde versie gebruiken.Zie Which Version of Spring Cloud Azure Should I Use voor meer informatie over de versie die voor deze BOM wordt gebruikt.
Het Spring Cloud Azure Starter-Microsoft Entra-artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Het artefact 'Spring Boot Starter OAuth2 Resource Server':
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
HTTP-aanvragen autoriseren
Als u de REST API's van de enquête wilt beveiligen, voegt u de aantekening @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") toe met een concrete bereiknaam om beveiliging mogelijk te maken, zoals wordt weergegeven in het volgende voorbeeld:
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;
}
}
Werk de YAML-configuratie bij zoals wordt weergegeven in het volgende voorbeeld:
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>
Opmerking
In v1.0-tokens is voor de configuratie de client-id van de API vereist, terwijl u in v2.0-tokens de client-id of de URI van de toepassings-id in de aanvraag kunt gebruiken. U kunt beide configureren om de validatie van de doelgroep correct te voltooien.
Implementeren in Azure Spring Apps
Nadat u de Spring Boot-toepassing lokaal hebt uitgevoerd, kunt u deze verplaatsen naar productie. Azure Spring Apps maakt het eenvoudig om Spring Boot-toepassingen te implementeren in Azure zonder codewijzigingen. De service beheert de infrastructuur van Spring-toepassingen, zodat ontwikkelaars zich kunnen richten op hun code. Azure Spring Apps biedt levenscyclusbeheer met behulp van uitgebreide bewaking en diagnose, configuratiebeheer, servicedetectie, CI/CD-integratie, blauwgroene implementaties en meer. Zie Quickstart: Uw eerste toepassing implementeren in Azure Spring Apps voor meer informatie.