Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym samouczku pokazano, jak włączyć ochronę API REST przy użyciu Microsoft Entra ID w aplikacji Spring Boot.
W tym artykule użyto systemu ankiety jako przykładu. System ankiety udostępnia następujące interfejsy API REST:
-
GET /api/survey/questionsłuży do wyświetlania ankiety. -
POST /api/surveyjest przeznaczony do wypełnienia ankiety. -
GET /api/surveysłuży do wyświetlania wyniku ankiety.
W tym artykule chronisz te interfejsy API, stosując kontrolę dostępu opartą na rolach (RBAC), aby wymusić następujące wymagania:
-
GET /api/survey/questionjest dostępny dla każdego żądania. -
POST /api/surveyJest dostępny dla uwierzytelnionych żądań użytkowników zawierających token dostępu z udzielonym zakresemSCOPE_Survey.User. -
GET /api/surveyJest dostępny dla żądań uwierzytelnionych użytkowników administracyjnych zawierających token dostępu z zakresemSCOPE_Survey.Adminprzyznanym.
Wymagania wstępne
- Subskrypcja Azure — utwórz ją bezpłatnie.
- Java Development Kit (JDK) w wersji 8 lub nowszej.
- Apache Maven
- Azure CLI
- Wystąpienie Microsoft Entra. Aby uzyskać instrukcje dotyczące tworzenia jednej, zobacz Quickstart: Tworzenie nowej dzierżawy w Microsoft Entra ID.
- Aplikacja Spring Boot. Jeśli go nie masz, utwórz projekt Maven za pomocą narzędzia Spring Initializr. Pamiętaj, aby wybrać Maven Project i w obszarze Dependencies, dodaj Spring Web, OAuth2 Resource Server i Microsoft Entra ID a następnie wybierz Java wersję 8 lub nowszą.
Ważne
Do wykonania kroków opisanych w tym artykule jest wymagany program Spring Boot w wersji 2.5 lub nowszej.
Rejestrowanie interfejsu API REST
Wykonaj poniższe kroki, aby zarejestrować internetowy interfejs API w portalu Azure.
Zaloguj się do portalu Azure.
Jeśli masz dostęp do wielu dzierżaw, użyj filtru Katalog i subskrypcja (
), aby wybrać dzierżawę, w której chcesz zarejestrować aplikację.Znajdź i wybierz Microsoft Entra ID.
W obszarze Manage wybierz Rejestracje aplikacji>Nowa rejestracja.
Wprowadź nazwę aplikacji w polu Nazwa , na przykład
Api-SurveyService. Użytkownicy aplikacji mogą zobaczyć tę nazwę i możesz ją zmienić później.W obszarze Obsługiwane typy kont wybierz pozycję Konta w dowolnym katalogu organizacyjnym.
Wybierz pozycję Zarejestruj, aby utworzyć aplikację.
Na stronie Przegląd aplikacji znajdź wartość identyfikator aplikacji (klienta), a następnie zapisz ją do późniejszego użycia. Potrzebny jest go do skonfigurowania pliku konfiguracji YAML dla tego projektu.
W obszarze Zarządzanie wybierz pozycję Uwidaczniaj interfejs API>Dodaj zakres. Zaakceptuj proponowany identyfikator URI aplikacji (
api://{clientId}), wybierając Zapisz i kontynuuj, a następnie wprowadź następujące informacje:- W polu Nazwa zakresu wprowadź wartość
Survey.User. - W obszarze Kto może wyrazić zgodę, wybierz pozycję Administratorzy i użytkownicy.
- W polu Nazwa wyświetlana zgody administratora wprowadź
Access the survey service as a user.. - W polu Opis zgody administratora wprowadź
Allows the users to write data in survey system.. - W polu Nazwa wyświetlana zgody użytkownika wprowadź .
Access the survey service as a user. - W polu Opis zgody użytkownika wprowadź
Allows the users to write data in survey system.. - W obszarze Stan zachowaj wartość Włączone.
- Wybierz Dodaj zakres.
- W polu Nazwa zakresu wprowadź wartość
Powtórz poprzedni krok, aby dodać kolejny zakres. Po wybraniu pozycji Dodaj zakres wprowadź następujące informacje:
- W polu Nazwa zakresu wprowadź wartość
Survey.Admin. - W obszarze Kto może wyrazić zgodę, wybierz pozycję Administratorzy i użytkownicy.
- W polu Nazwa wyświetlana zgody administratora wprowadź
Access the survey service as a admin.. - W polu Opis zgody administratora wprowadź
Allows the users to view data in survey system.. - W polu Nazwa wyświetlana zgody użytkownika wprowadź .
Access the survey service as a admin. - W polu Opis zgody użytkownika wprowadź
Allows the users to view data in survey system.. - W obszarze Stan zachowaj wartość Włączone.
- Wybierz Dodaj zakres.
- W polu Nazwa zakresu wprowadź wartość
Włącz starter Spring Cloud Azure dla Microsoft Entra ID
Następnie włącz ochronę interfejsu API REST przy użyciu usługi Spring Cloud Azure.
Dodaj zależności zabezpieczeń
Aby zainstalować moduł Spring Cloud Azure Starter Azure Active Directory, dodaj następujące zależności do pliku pom.xml:
Projekt Spring Cloud Azure Bill of Materials (BOM):
<dependencyManagement> <dependencies> <dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-dependencies</artifactId> <version>7.3.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>Uwaga
Jeśli używasz platformy Spring Boot 4.0.x, pamiętaj, aby ustawić
spring-cloud-azure-dependencieswersję na7.3.0.Jeśli używasz platformy Spring Boot 3.5.x, pamiętaj, aby ustawić
spring-cloud-azure-dependencieswersję na6.4.0.Jeśli używasz platformy Spring Boot 3.1.x-3.5.x, pamiętaj, aby ustawić
spring-cloud-azure-dependencieswersję na5.25.0.Jeśli używasz środowiska Spring Boot 2.x, ustaw wersję
spring-cloud-azure-dependenciesna4.20.0.Tę listę materiałów (BOM) należy skonfigurować w sekcji
<dependencyManagement>pliku pom.xml. Dzięki temu wszystkie zależności usługi Spring Cloud Azure korzystają z tej samej wersji.Aby uzyskać więcej informacji na temat wersji używanej w tym BOM, zobacz Którą wersję Spring Cloud Azure powinienem użyć?.
Artefakt startowej Azure Spring Cloud Microsoft Entra:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Artefakt serwera zasobów OAuth2 startowego środowiska Spring Boot:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Autoryzowanie żądań HTTP
Aby chronić interfejsy API REST ankiety, dodaj adnotację @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") z konkretną nazwą zakresu w celu włączenia ochrony, jak pokazano w poniższym przykładzie:
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;
}
}
Zaktualizuj konfigurację YAML, jak pokazano w poniższym przykładzie:
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>
Uwaga
W tokenach w wersji 1.0 konfiguracja wymaga identyfikatora klienta interfejsu API, natomiast w tokenach w wersji 2.0 można użyć identyfikatora klienta lub identyfikatora URI aplikacji w żądaniu. Oba te elementy można skonfigurować tak, aby prawidłowo ukończyć walidację odbiorców.
Wdrażanie do Azure Spring Apps
Po uruchomieniu aplikacji Spring Boot lokalnie możesz przenieść ją do środowiska produkcyjnego. Azure Spring Apps ułatwia wdrażanie aplikacji Spring Boot w Azure bez żadnych zmian w kodzie. Usługa zarządza infrastrukturą aplikacji Spring, aby deweloperzy mogli skupić się na swoim kodzie. Azure Spring Apps zapewnia zarządzanie cyklem życia przy użyciu kompleksowego monitorowania i diagnostyki, zarządzania konfiguracją, odnajdywania usług, integracji CI/CD, wdrożeń blue-green i nie tylko. Aby uzyskać więcej informacji, zobacz Quickstart: Wdrażanie pierwszej aplikacji w Azure Spring Apps.