Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Este tutorial mostra-te como ativar a proteção das APIs REST com Microsoft Entra ID numa aplicação Spring Boot.
Este artigo usa um sistema de pesquisa como exemplo. O sistema de pesquisa fornece as seguintes APIs REST:
-
GET /api/survey/questioné para visualizar a pesquisa. -
POST /api/surveyé para preencher a pesquisa. -
GET /api/surveyé para visualizar o resultado da pesquisa.
Neste artigo, você protege essas APIs aplicando RBAC (controle de acesso baseado em função) para impor os seguintes requisitos:
-
GET /api/survey/questionestá disponível para cada solicitação. -
POST /api/surveyestá disponível para solicitações de usuários autenticados contendo um token de acesso com oSCOPE_Survey.Userescopo concedido. -
GET /api/surveyestá disponível para solicitações de usuário administrador autenticadas contendo um token de acesso com o escopoSCOPE_Survey.Adminconcedido.
Pré-requisitos
- Assinatura do Azure - crie uma gratuitamente.
- Kit de Desenvolvimento Java (JDK) versão 8 ou superior.
- Apache Maven
- CLI do Azure
- Uma instância da Microsoft Entra. Para instruções sobre como criar um, veja Quickstart: Criar um novo inquilino em Microsoft Entra ID.
- Um aplicativo Spring Boot. Se você não tiver um, crie um projeto Maven com o Spring Initializr. Certifique-se de selecionar Maven Project e, em Dependências, adicionar as dependências Spring Web, OAuth2 Resource Server e Microsoft Entra ID, e depois selecione Java versão 8 ou superior.
Importante
O Spring Boot versão 2.5 ou superior é necessário para concluir as etapas neste artigo.
Registrar a API REST
Use os seguintes passos para registar a sua API web no portal Azure.
Inicie sessão no portal Azure.
Se você tiver acesso a vários locatários, use o filtro Diretório + assinatura (
) para selecionar o locatário no qual deseja registrar um aplicativo.Encontre e selecione Microsoft Entra ID.
Em Gerir, selecione Registos de aplicações>Nova matrícula.
Introduza um nome para a sua aplicação no campo Nome , por exemplo
Api-SurveyService. Os usuários do seu aplicativo podem ver esse nome e você pode alterá-lo mais tarde.Em Tipos de conta suportados, selecione Contas em qualquer diretório organizacional.
Selecione Registrar para criar o aplicativo.
Na página Visão geral do aplicativo, procure o valor da ID do aplicativo (cliente) e registre-o para uso posterior. Você precisa dele para configurar o arquivo de configuração YAML para este projeto.
Em Gerenciar, selecione Expor uma API>Adicionar um escopo. Aceite o URI de ID do Aplicativo proposto (
api://{clientId}) selecionando Salvar e continuar e insira as seguintes informações:- Em Nome do escopo, digite
Survey.User. - Em Quem pode consentir, selecione Administradores e usuários.
- Para Nome de exibição do consentimento do administrador, introduza
Access the survey service as a user.. - Para Descrição do consentimento do administrador, insira
Allows the users to write data in survey system.. - Para Nome de exibição do Consentimento do usuário, digite
Access the survey service as a user.. - Para Descrição do consentimento do utilizador, introduza
Allows the users to write data in survey system.. - Para Estado, mantenha Ativado.
- Selecione Adicionar escopo.
- Em Nome do escopo, digite
Repita a etapa anterior para adicionar outro escopo. Ao selecionar Adicionar um escopo, insira as seguintes informações:
- Em Nome do escopo, digite
Survey.Admin. - Em Quem pode consentir, selecione Administradores e usuários.
- Para Nome de exibição do consentimento do administrador, introduza
Access the survey service as a admin.. - Para Descrição do consentimento do administrador, insira
Allows the users to view data in survey system.. - Para Nome de exibição do Consentimento do usuário, digite
Access the survey service as a admin.. - Para Descrição do consentimento do utilizador, introduza
Allows the users to view data in survey system.. - Para Estado, mantenha Ativado.
- Selecione Adicionar escopo.
- Em Nome do escopo, digite
Ativar o Spring Cloud Azure Starter Microsoft Entra ID
De seguida, ative a proteção da API REST com o Spring Cloud Azure.
Adicionar dependências de segurança
Para instalar o módulo Spring Cloud Azure Starter Azure Active Directory, adicione as seguintes dependências ao seu ficheiro pom.xml:
A Lista de Materiais 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>Observação
Se estiveres a usar o Spring Boot 4.0.x, define a
spring-cloud-azure-dependenciesversão para7.4.0.Se estiveres a usar o Spring Boot 3.5.x, define a
spring-cloud-azure-dependenciesversão para6.5.0.Se estiveres a usar o Spring Boot 3.1.x-3.5.x, certifica-te de definir a
spring-cloud-azure-dependenciesversão para5.25.0.Se você estiver usando o Spring Boot 2.x, certifique-se de definir a versão
spring-cloud-azure-dependenciescomo4.20.0.Esta lista de materiais (BOM) deve ser configurada na seção
<dependencyManagement>do seu arquivo pom.xml. Isto garante que todas as dependências do Spring Cloud Azure usam a mesma versão.Para mais informações sobre a versão usada nesta BOM, veja Qual Versão do Spring Cloud Azure Devo Usar.
The Spring Cloud Azure Starter Microsoft Entra artefact:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>Artefato do Spring Boot Starter OAuth2 Resource Server:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Autorizar solicitações HTTP
Para proteger as APIs REST de survey, adicione a anotação @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") com um nome de escopo específico para habilitar a proteção, como mostrado no exemplo a seguir:
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;
}
}
Atualize a configuração do YAML conforme mostrado no exemplo a seguir:
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>
Observação
Nos tokens v1.0, a configuração requer o ID do cliente da API, enquanto nos tokens v2.0, você pode usar o ID do cliente ou o URI do ID do aplicativo na solicitação. Você pode configurar ambos os elementos para concluir corretamente a validação de público.
Implementar no Azure Spring Apps
Depois de ter o aplicativo Spring Boot em execução localmente, você pode movê-lo para a produção. Azure Spring Apps facilita a implementação de aplicações Spring Boot para Azure sem quaisquer alterações de código. O serviço gerencia a infraestrutura dos aplicativos Spring para que os desenvolvedores possam se concentrar em seu código. O Azure Spring Apps oferece gestão do ciclo de vida através de monitorização e diagnóstico abrangentes, gestão de configuração, descoberta de serviços, integração CI/CD, implementações azul-verde e muito mais. Para mais informações, consulte Quickstart: Implemente a sua primeira aplicação para Azure Spring Apps.