Tutorial: Autenticación del cliente con Spring Cloud Gateway en Azure Spring Apps
Nota:
Los planes de Básico, Estándar y Enterprise quedarán en desuso a partir de mediados de marzo de 2025, con un período de retiro de 3 años. Se recomienda realizar la transición a Azure Container Apps. Para más información, consulte el anuncio de retirada de Azure Spring Apps.
El plan de consumo estándar y dedicado quedará obsoleto a partir del 30 de septiembre de 2024, con un cierre completo al cabo de seis meses. Se recomienda realizar la transición a Azure Container Apps. Para obtener más información, consulte Migrar el plan de consumo y dedicado Azure Spring Apps Standard a Azure Container Apps.
Este artículo se aplica a:✅ Consumo estándar y dedicado (versión preliminar)
En este inicio rápido se muestra cómo proteger la comunicación entre una aplicación cliente y una aplicación de microservicio hospedada en Azure Spring Apps y blindada con una aplicación Spring Cloud Gateway. La aplicación cliente se verifica como una entidad de seguridad para iniciar el contacto con el microservicio implementado en Azure Spring Apps, mediante la aplicación compilada con Spring Cloud Gateway. Este método emplea las características de Token Relay de Spring Cloud Gateway y Resource Server de Spring Security para los procesos de autenticación y autorización, realizados a través de la ejecución del flujo de credenciales de cliente de OAuth 2.0.
En la lista siguiente se muestra la composición del proyecto de ejemplo:
- SPA de libros: esta aplicación de página única (SPA), hospedada localmente, interactúa con el microservicio Libros para agregar o buscar libros.
- Microservicio Libros:
- Una aplicación de Spring Cloud Gateway hospedada en Azure Spring Apps. Esta aplicación funciona como puerta de enlace a las API de RESTful de Libros.
- Una aplicación de API RESTful de Spring Boot hospedada en Azure Spring Apps. Esta aplicación almacena la información del libro en una base de datos H2. El servicio Libros expone dos puntos de conexión REST para escribir y leer libros.
1. Prerrequisitos
- Suscripción a Azure. Si no tiene una suscripción, cree una cuenta gratuita antes de empezar.
- Git.
- Kit de desarrollo de Java (JDK), versión 17.
- Un inquilino de Microsoft Entra. Para más información sobre cómo crear un inquilino de Microsoft Entra, consulte Inicio rápido: Creación de un nuevo inquilino en Microsoft Entra ID.
- CLI de Azure: versión 2.45.0 o superior.
- Instale Node.js.
2. Preparar el proyecto Spring
Siga estos pasos para clonar y ejecutar la aplicación localmente:
Use el siguiente comando para clonar el proyecto de muestra desde GitHub:
git clone https://github.com/Azure-Samples/azure-spring-apps-sso-client-credential.git -b consumption-plan
Use el siguiente comando para compilar los servicios back-end de Libros:
cd azure-spring-apps-sso-client-credential ./mvnw clean package
Escriba el directorio del proyecto SPA y use el siguiente comando para instalar las dependencias:
npm install @azure/msal-node
3. Preparar el entorno en la nube
Los principales recursos necesarios para ejecutar este ejemplo son una instancia de Azure Spring Apps y una instancia de Azure Database for PostgreSQL. En esta sección se proporcionan los pasos para crear estos recursos.
3.1. Inicio de sesión en Azure Portal
Abra el explorador web y vaya a Azure Portal. Introduzca sus credenciales para iniciar sesión en Azure Portal. La vista predeterminada es el panel del servicio.
3.2. Creación de una instancia de Azure Spring Apps
Siga estos pasos para crear una instancia de servicio:
En la esquina de Azure Portal, seleccione Crear un recurso.
Seleccione Proceso>Azure Spring Apps.
Complete el formulario de aspectos básicos con la información siguiente:
Configuración Valor sugerido Descripción Subscription Nombre de la suscripción La suscripción de Azure que desea usar para el servidor. Si tiene varias suscripciones, elija aquella en la que quiere que se le facture el recurso. Resource group myresourcegroup Un nuevo nombre de grupo de recursos o uno existente de la suscripción. Nombre myasa Nombre único que identifica al servicio de Azure Spring Apps. El nombre debe tener entre 4 y 32 caracteres, y solo puede contener números, letras minúsculas y guiones. El primer carácter del nombre del servicio debe ser una letra y el último debe ser una letra o un número. Plan Consumo estándar y dedicado (versión preliminar) El plan de precios determina los recursos y el coste asociados a la instancia. Region Región más cercana a los usuarios La ubicación más cercana a los usuarios. Entorno de Container Apps myacaenv Seleccione la instancia del entorno de Container Apps para compartir la misma red virtual con otros servicios y recursos. Use la tabla siguiente como guía para crear el entorno de Container Apps:
Configuración Valor sugerido Descripción Nombre del entorno myacaenv Un nombre único que identifique el servicio del entorno de Azure Container Apps. Plan Consumo El plan de precios determina los recursos y el coste asociados a la instancia. Redundancia de zona Deshabilitado Si se crea el servicio del entorno de Container Apps en una zona de disponibilidad de Azure. Importante
El perfil de carga de trabajo Consumo tiene un modelo de facturación de pago por uso, sin costo inicial. La factura del perfil de carga de trabajo dedicado se genera en función de los recursos aprovisionados. Para más información, vea Perfiles de carga de trabajo en entornos con estructura de plan por consumo y dedicado en Azure Container Apps (versión preliminar) y Precios de Azure Spring Apps.
Seleccione Revisar y crear para revisar las selecciones. Seleccione Crear para aprovisionar la instancia de Azure Spring Apps.
En la barra de herramientas, seleccione el símbolo de Notificaciones (una campana) para supervisar el proceso de implementación. Una vez realizada la implementación, puede seleccionar Anclar al panel para crear un icono para este servicio en el panel de Azure Portal como un acceso directo a la página Información general del servicio. Seleccione Ir al recurso para abrir la página Información general del servicio.
Use el siguiente comando para habilitar Eureka Server. Asegúrese de reemplazar los marcadores de posición por los propios valores que creó en el paso anterior.
az spring eureka-server enable \ --resource-group <resource-group-name> \ --name <Azure-Spring-Apps-instance-name>
3.3. Registro de la aplicación Libros
En esta sección se proporcionan los pasos para registrar una aplicación para agregar roles de aplicación en Microsoft Entra ID, que se usa para proteger las API de RESTful en Azure Spring Apps.
Vaya a la página de inicio de Azure Portal.
Si tiene acceso a varios inquilinos, use el filtro Directorio + suscripción () para seleccionar el inquilino en el que desea registrar una aplicación.
Busque y seleccione Microsoft Entra ID.
En Administrar, seleccione Registros de aplicaciones> y, luego, Nuevo registro.
Escriba un nombre para la aplicación en el campo Nombre, por ejemplo Libros. Los usuarios de la aplicación pueden ver este nombre, el cual se puede cambiar más tarde.
Para la opción Tipos de cuenta admitidos, seleccione Solo las cuentas de este 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. Necesita configurar el archivo de configuración de YAML para este proyecto.
En Administrar, seleccione Exponer una API, busque el URI de ID de aplicación al principio de la página y, a continuación, seleccione Agregar.
En la página Editar identificador URI de ID de aplicación, acepte el URI de ID de aplicación propuesto (
api://{client ID}
) o use un nombre descriptivo en lugar del identificador de cliente, comoapi://books
y, a continuación, seleccione Guardar.En Administrar, seleccione Roles de aplicación>Crear rol de aplicación y escriba la siguiente información:
- En Nombre para mostrar, escriba Escribir.
- En Tipos de miembros permitidos, seleccione Aplicaciones.
- En Valor, escriba BooksWrite.
- En Descripción, escriba Agregar libros.
Repita el paso anterior para agregar otro rol de aplicación:
Books.Read
.
3.4. Registro de la aplicación SPA
La aplicación de API RESTful Libros actúa como un servidor de recursos, que está protegido por Microsoft Entra ID. Antes de adquirir un token de acceso, debe registrar otra aplicación en Microsoft Entra ID y conceder permisos a la aplicación cliente, que se denomina SPA
.
Vuelva al inquilino en Microsoft Entra ID.
En Administrar, seleccione Registros de aplicaciones> y, luego, Nuevo registro.
Escriba un nombre para la aplicación en el campo Nombre, por ejemplo
SPA
.Para la opción Tipos de cuenta admitidos, use Solo las cuentas de este directorio organizativo de forma predeterminada.
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. Necesita adquirir el token de acceso.
Seleccione Permisos de API>Agregar un permiso>API usadas en mi organización. Seleccione la aplicación
Books
que registró anteriormente, seleccione los permisos Books.Read y Books.Write y, a continuación, seleccione Agregar permisos.Seleccione Conceder consentimiento del administrador para <el nombre del inquilino> para conceder el consentimiento del administrador para los permisos que agregó.
Seleccione Certificados y secretos y, después, Nuevo secreto de cliente.
En la página Agregar un secreto de cliente, escriba una descripción del secreto, seleccione una fecha de expiración y seleccione Agregar.
Busque el valor del secreto y, a continuación, guárdelo para su uso posterior. Necesita adquirir un token de acceso.
3.5. Actualización de la configuración de la aplicación Books Service
Busque el archivo books-service/src/main/resources/application.yml de la aplicación books-service
. Actualice la configuración de la sección spring.cloud.azure.active-directory
para que coincida con el ejemplo siguiente. Asegúrese de reemplazar los marcadores de posición por los valores que creó anteriormente.
spring:
cloud:
azure:
active-directory:
credential:
client-id: <your-application-ID-of-Books>
app-id-uri: <your-application-ID-URI-of-Books>
Use el siguiente comando para recompilar el proyecto de ejemplo:
./mvnw clean package
4. Implementar las aplicaciones en Azure Spring Apps
En los pasos siguientes se indica cómo implementar las aplicaciones en Azure.
4.1. Implementar las aplicaciones de microservicio en Azure Spring Apps
Siga estos pasos para implementar las aplicaciones en Azure Spring Apps mediante el complemento Maven para Azure Spring Apps:
Vaya al directorio del proyecto de ejemplo y, a continuación, use el siguiente comando para configurar la aplicación en Azure Spring Apps:
./mvnw com.microsoft.azure:azure-spring-apps-maven-plugin:1.18.0:config
En la lista siguiente se describen las interacciones del comando:
- Seleccione módulos secundarios para configurar (números de entrada separados por comas, por ejemplo: [1-2,4,6]; INTRO para seleccionar TODO): presione Intro para seleccionar todo.
- Inicio de sesión de OAuth2: autorice el inicio de sesión a Azure en función del protocolo OAuth2.
- Seleccionar suscripción: seleccione el número de lista de suscripciones de la instancia de Azure Spring Apps que creó, que tiene como valor predeterminado la primera suscripción de la lista. Si usa el número predeterminado, presione Entrar directamente.
- Seleccione Azure Spring Apps para la implementación: seleccione el número de lista de la instancia de Azure Spring Apps que creó. Si usa el número predeterminado, presione Entrar directamente.
- Seleccione aplicaciones para exponer el acceso público: (números de entrada separados por comas, por ejemplo: [1-2,4,6]; INTRO para seleccionar NINGUNO): escriba 1 para
gateway-service
. - Confirme para guardar todas las configuraciones anteriores (Y/n): escriba y. Si escribe n, la configuración no se guardará en los archivos POM.
Use el siguiente comando para implementar la aplicación:
./mvnw azure-spring-apps:deploy
En la lista siguiente se describe la interacción del comando:
- Inicio de sesión de OAuth2: autorice el inicio de sesión a Azure en función del protocolo OAuth2.
Una vez ejecutado el comando, puede ver en los siguientes mensajes de registro que indican que la implementación se ha realizado correctamente.
[INFO] Getting public url of app(gateway-service)... [INFO] Application url: https://gateway-service.xxxxxxxxxxxxxx-xxxxxxxx.eastasia.azurecontainerapps.io ... [INFO] Artifact(books-service-0.0.1-SNAPSHOT.jar) is uploaded and deployment(default) is successfully updated. ...
La dirección URL de la aplicación de salida es el punto de conexión base para acceder a la aplicación API de RESTful de ToDo.
4.2. Ejecución local de la aplicación SPA
Actualice la configuración en el archivo de script de la aplicación SPA
spa/server.js para que coincida con el ejemplo siguiente. Asegúrese de reemplazar los marcadores de posición por los propios valores que creó en el paso anterior.
const SpringCloudGatewayURL = "<URL exposed by app gateway-service>"
const msalConfig = {
auth: {
clientId: "< SPA App Registration ClientId>",
authority: "https://login.microsoftonline.com/< TenantId >/",
clientSecret: "<SPA App Registration ClientSecret>",
},
};
const tokenRequest = {
scopes: ["<Application ID URI of Books>/.default"]
};
En el directorio del proyecto SPA, use el siguiente comando para ejecutarlo localmente:
node server.js
Nota:
La aplicación SPA es una aplicación web estática, que se puede implementar en cualquier servidor web.
5. Validación de la aplicación
Puede acceder a la aplicación SPA de libros que se comunica con las API RESTful de libros a través de la aplicación gateway-service
.
Vaya a
http://localhost:3000
en el explorador para acceder a la aplicación.Escriba los valores de Autor y Título y, a continuación, seleccione Agregar libro. Verá una respuesta similar a la del siguiente ejemplo:
Book added successfully: {"id":1,"author":"Jeff Black","title":"Spring In Action"}
6. Limpieza de recursos
Puede eliminar el grupo de recursos de Azure, lo que incluye todos los recursos del grupo de recursos. Siga los siguientes pasos para eliminar todo el grupo de recursos, incluyendo el servicio recién creado:
Elimine el grupo de recursos en Azure Portal.
Seleccione Grupos de recursos y el nombre del grupo de recursos, por ejemplo, myresourcegroup.
En la página del grupo de recursos, seleccione Eliminar. Escriba el nombre del grupo de recursos en el cuadro de texto para confirmar la eliminación.
Seleccione Eliminar.
7. Pasos siguientes
Para más información, consulte los siguientes artículos.