Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu se dozvíte, jak povolit ochranu rozhraní REST API pomocí Microsoft Entra ID v aplikaci Spring Boot.
Tento článek používá jako příklad systém průzkumu. Systém průzkumu poskytuje následující rozhraní REST API:
-
GET /api/survey/questionje pro zobrazení průzkumu. -
POST /api/surveyje pro vyplnění průzkumu. -
GET /api/surveyje pro zobrazení výsledku průzkumu.
V tomto článku chráníte tato rozhraní API použitím řízení přístupu na základě role (RBAC) k vynucení následujících požadavků:
-
GET /api/survey/questionje k dispozici pro každou žádost. -
POST /api/surveyje k dispozici pro požadavky ověřených uživatelů obsahující přístupový token s uděleným oboremSCOPE_Survey.User. -
GET /api/surveyje k dispozici pro žádosti ověřených uživatelů s oprávněními správce, které obsahují přístupový token s uděleným oboremSCOPE_Survey.Admin.
Požadavky
- Předplatné Azure – vytvořte si ho zdarma.
- Java Development Kit (JDK) verze 8 nebo vyšší.
- Apache Maven
- Azure CLI
- Instance Microsoft Entra. Pokyny k jeho vytvoření najdete v tématu Quickstart: Vytvoření nového tenanta v Microsoft Entra ID.
- Aplikace Spring Boot. Pokud ho nemáte, vytvořte projekt Maven pomocí aplikace Spring Initializr. Nezapomeňte vybrat Maven Project a v části Dependencies, přidejte Spring Web, OAuth2 Resource Server a Microsoft Entra ID závislostí a pak vyberte Java verze 8 nebo vyšší.
Důležitý
K dokončení kroků v tomto článku se vyžaduje Spring Boot verze 2.5 nebo vyšší.
Registrace rozhraní REST API
Pomocí následujícího postupu zaregistrujte webové rozhraní API na portálu Azure.
Přihlaste se k portálu Azure.
Pokud máte přístup k více tenantům, pomocí filtru Directory + předplatného (
) vyberte tenanta, ve kterém chcete aplikaci zaregistrovat.Najděte a vyberte Microsoft Entra ID.
V části Manage vyberte Registrace aplikací>Nová registrace.
Do pole Název zadejte název aplikace, například
Api-SurveyService. Uživatelé vaší aplikace můžou vidět tento název a později ho můžete změnit.U podporovaných typů účtů vyberte Účty v libovolném adresáři organizace.
Vyberte Zaregistrovat a vytvořte aplikaci.
Na stránce Přehled aplikace vyhledejte hodnotu ID aplikace (klienta) a potom ji poznamenejte pro pozdější použití. Potřebujete ho ke konfiguraci konfiguračního souboru YAML pro tento projekt.
V části Spravovat vyberte Zveřejnit rozhraní API>Přidat obor. Přijměte navrhovaný identifikátor URI ID aplikace (
api://{clientId}) tak, že vyberete Uložit a pokračovat a pak zadáte následující informace:- Jako název oboruzadejte
Survey.User. - V Kdo může souhlasit, vyberte Správci a uživatelé.
- Pro zobrazený název souhlasu správce zadejte .
- U popisu souhlasu správce zadejte
Allows the users to write data in survey system.. - Pro zobrazované jméno souhlasu uživatelezadejte
Access the survey service as a user.. - Pro popis souhlasu uživatele zadejte .
- Pro Stav ponechte Povoleno.
- Vyberte Přidat rozsah.
- Jako název oboruzadejte
Opakováním předchozího kroku přidejte další obor. Když vyberete Přidat obor, zadejte následující informace:
- Jako název oboruzadejte
Survey.Admin. - V Kdo může souhlasit, vyberte Správci a uživatelé.
- Pro zobrazený název souhlasu správce zadejte .
- U popisu souhlasu správce zadejte
Allows the users to view data in survey system.. - Pro zobrazované jméno souhlasu uživatelezadejte
Access the survey service as a admin.. - Pro popis souhlasu uživatele zadejte .
- Pro Stav ponechte Povoleno.
- Vyberte Přidat rozsah.
- Jako název oboruzadejte
Povolte Microsoft Entra ID Starter pro Spring Cloud Azure
Dále povolte ochranu rozhraní REST API s Azure Spring Cloud.
Přidejte závislosti zabezpečení
Pokud chcete nainstalovat modul Spring Cloud Azure Starter Azure Active Directory, přidejte do souboru pom.xml následující závislosti:
Spring Cloud Azure 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>Poznámka
Pokud používáte Spring Boot 4.0.x, nastavte
spring-cloud-azure-dependenciesverzi na7.4.0hodnotu .Pokud používáte Spring Boot 3.5.x, nastavte
spring-cloud-azure-dependenciesverzi na6.5.0hodnotu .Pokud používáte Spring Boot 3.1.x-3.5.x, nezapomeňte nastavit verzi na
spring-cloud-azure-dependencies.Pokud používáte Spring Boot 2.x, nezapomeňte nastavit
spring-cloud-azure-dependenciesverzi na4.20.0.Tato faktura materiálu (BOM) by měla být nakonfigurována v
<dependencyManagement>části vašeho pom.xml souboru. Tím zajistíte, že všechny závislosti Spring Cloud Azure budou používat stejnou verzi.Další informace o verzi použité pro tento kusovník najdete v tématu Kterou verzi Spring Cloud Azure bych měl použít.
Artefakt úvodního Microsoft Entra Azure Spring Cloudu:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Artefakt Spring Boot Starter pro server prostředků OAuth2:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Autorizace požadavků HTTP
Pokud chcete chránit rozhraní REST API průzkumu, přidejte poznámku @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") s konkrétním názvem oboru, abyste povolili ochranu, jak je znázorněno v následujícím příkladu:
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;
}
}
Aktualizujte konfiguraci YAML, jak je znázorněno v následujícím příkladu:
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>
Poznámka
V tokenech v1.0 konfigurace vyžaduje ID klienta rozhraní API, zatímco v tokenech v2.0 můžete v požadavku použít ID klienta nebo identifikátor URI ID aplikace. Obě možnosti můžete nakonfigurovat tak, aby správně dokončily ověřování cílové skupiny.
Nasazení do Azure Spring Apps
Jakmile budete mít aplikaci Spring Boot spuštěnou místně, můžete ji přesunout do produkčního prostředí. Azure Spring Apps usnadňuje nasazování aplikací Spring Boot do Azure bez jakýchkoli změn kódu. Služba spravuje infrastrukturu aplikací Spring, aby se vývojáři mohli soustředit na svůj kód. Azure Spring Apps poskytuje správu životního cyklu pomocí komplexního monitorování a diagnostiky, správy konfigurace, zjišťování služeb, integrace CI/CD, modrých zelených nasazení a dalších. Další informace najdete v tématu Quickstart: Nasazení první aplikace do Azure Spring Apps.