Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial se muestra cómo habilitar la protección de las API REST con Microsoft Entra ID en una aplicación de Spring Boot.
En este artículo se usa un sistema de encuestas como ejemplo. El sistema de encuestas proporciona las siguientes API REST:
-
GET /api/survey/questionse utiliza para ver la encuesta. -
POST /api/surveyes para rellenar la encuesta. -
GET /api/surveyes para ver el resultado de la encuesta.
En este artículo, protegerá estas API aplicando el control de acceso basado en rol (RBAC) para aplicar los siguientes requisitos:
-
GET /api/survey/questionestá disponible para cada solicitud. -
POST /api/surveyestá disponible para las solicitudes de usuario autenticadas que contienen un token de acceso con elSCOPE_Survey.Useralcance concedido. -
GET /api/surveyestá disponible para las solicitudes de usuario administrador autenticadas que contienen un token de acceso con el ámbitoSCOPE_Survey.Adminconcedido.
Prerrequisitos
- Una suscripción Azure: crear una gratuita.
- Java Kit de desarrollo (JDK) versión 8 o posterior.
- Apache Maven
- Azure CLI
- Una instancia de Microsoft Entra. Para obtener instrucciones sobre cómo crear una, consulte Quickstart: Creación de un nuevo inquilino en Microsoft Entra ID.
- Una aplicación de Spring Boot. Si no tiene uno, cree un proyecto de Maven con Spring Initializr. Asegúrese de seleccionar Maven Project y, en Dependencies, agregue el Spring Web, OAuth2 Resource Server y Microsoft Entra ID y seleccione Java versión 8 o posterior.
Importante
Se requiere Spring Boot versión 2.5 o posterior para completar los pasos descritos en este artículo.
Registro de la API REST
Siga estos pasos para registrar la API web en el portal de Azure.
Inicie sesión en el portal Azure.
Si tiene acceso a varios inquilinos, use el filtro Directorio y suscripción (
) para seleccionar el inquilino en el que desea registrar una aplicación.Busque y seleccione Microsoft Entra ID.
En Manage, seleccione App registrations>Nuevo registro.
Escriba un nombre para la aplicación en el campo Nombre , por ejemplo
Api-SurveyService. Los usuarios de la aplicación pueden ver este nombre, el cual se puede cambiar más tarde.En Tipos de cuenta admitidos, seleccione Cuentas en cualquier directorio organizativo.
Seleccione Registrar para crear la aplicación.
En la página Overview (Información general) de la aplicación, busque el valor de Application (client) ID (Id. de cliente de la aplicación) y regístrelo para usarlo más tarde. Debe configurar el archivo de configuración de YAML para este proyecto.
En Administrar, seleccione Exponer una API>Agregar un ámbito. Acepte el URI de identificador de aplicación propuesto (
api://{clientId}), seleccione Save and Continue (Guardar y continuar) y escriba la información siguiente:- En Nombre de ámbito, escriba
Survey.User. - En Quién puede dar su consentimiento, seleccione Administradores y usuarios.
- En Nombre para mostrar del consentimiento del administrador, escriba
Access the survey service as a user.. - En Descripción del consentimiento del administrador, escriba
Allows the users to write data in survey system.. - En Nombre para mostrar del consentimiento del usuario, escriba
Access the survey service as a user.. - En Descripción del consentimiento del usuario, escriba
Allows the users to write data in survey system.. - Para Estado, mantenga Habilitado.
- Selecciona la opción Agregar un ámbito.
- En Nombre de ámbito, escriba
Repita el paso anterior para agregar otro ámbito. Al seleccionar Agregar un ámbito, escriba la siguiente información:
- En Nombre de ámbito, escriba
Survey.Admin. - En Quién puede dar su consentimiento, seleccione Administradores y usuarios.
- En Nombre para mostrar del consentimiento del administrador, escriba
Access the survey service as a admin.. - En Descripción del consentimiento del administrador, escriba
Allows the users to view data in survey system.. - En Nombre para mostrar del consentimiento del usuario, escriba
Access the survey service as a admin.. - En Descripción del consentimiento del usuario, escriba
Allows the users to view data in survey system.. - Para Estado, mantenga Habilitado.
- Selecciona la opción Agregar un ámbito.
- En Nombre de ámbito, escriba
Habilitar Spring Cloud Azure Starter Microsoft Entra ID
A continuación, habilite la protección de la API REST con Spring Cloud Azure.
Agregar dependencias de seguridad
Para instalar el módulo Spring Cloud Azure Starter Azure Active Directory, agregue las siguientes dependencias al archivo pom.xml:
La Lista de Materiales (BOM) de Spring Cloud Azure:
<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>Nota:
Si usa Spring Boot 4.0.x, asegúrese de establecer la versión en
spring-cloud-azure-dependencies7.1.0.Si usa Spring Boot 3.5.x, asegúrese de establecer la versión
spring-cloud-azure-dependenciesa6.1.0.Si usa Spring Boot 3.1.x-3.5.x, asegúrese de establecer la versión de
spring-cloud-azure-dependenciesa5.25.0.Si usa Spring Boot 2.x, asegúrese de establecer la versión de
spring-cloud-azure-dependenciesen4.20.0.Esta lista de materiales (BOM) debe configurarse en la sección
<dependencyManagement>del archivo pom.xml. Esto garantiza que todas las dependencias de Spring Cloud Azure usen la misma versión.Para obtener más información sobre la versión usada para esta lista de materiales, consulte Qué versión de Spring Cloud Azure debería usar.
El artefacto Microsoft Entra Starter de Spring Cloud Azure:
<dependency> <groupId>com.azure.spring</groupId> <artifactId>spring-cloud-azure-starter-active-directory</artifactId> </dependency>El artefacto del servidor de recursos OAuth2 de Spring Boot Starter:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-resource-server</artifactId> </dependency>
Autorización de solicitudes HTTP
Para proteger las API REST de encuesta, agregue la anotación @PreAuthorize("hasAuthority('SCOPE_Survey.xxx')") con un nombre de ámbito concreto para habilitar la protección, como se muestra en el ejemplo siguiente:
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;
}
}
Actualice la configuración de YAML como se muestra en el ejemplo siguiente:
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>
Nota:
En los tokens v1.0 la configuración requiere el identificador de cliente de la API, mientras que en los tokens v2.0 puede usar el identificador de cliente o el URI del identificador de la aplicación que aparece en la solicitud. Puede configurar ambos para completar correctamente la validación de la audiencia.
Implementación en Azure Spring Apps
Después de que la aplicación Spring Boot se ejecute localmente, puede moverla a producción. Azure Spring Apps facilita la implementación de aplicaciones de Spring Boot en Azure sin cambios en el código. El servicio administra la infraestructura de las aplicaciones de Spring, con el fin de que los desarrolladores puedan centrarse en el código. Azure Spring Apps proporciona administración del ciclo de vida mediante supervisión y diagnósticos completos, administración de configuración, detección de servicios, integración de CI/CD, implementaciones azul-verde, etc. Para obtener más información, consulte Quickstart: Implementación de la primera aplicación en Azure Spring Apps.