View a markdown version of this page

Implemente la autenticación basada en Microsoft Entra ID en una aplicación de mainframe modernizada de AWS Blu Age - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Implemente la autenticación basada en Microsoft Entra ID en una aplicación de mainframe modernizada de AWS Blu Age

Vishal Jaswani y Rimpy Tewani, Amazon Web Services

Resumen

nota

AWS Mainframe Modernization El servicio (experiencia de entorno de ejecución gestionado) ya no está abierto a nuevos clientes. Para obtener funcionalidades similares a las AWS Mainframe Modernization de Service (experiencia en entornos de ejecución gestionados), explore AWS Mainframe Modernization Service (experiencia autogestionada). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de AWS Mainframe Modernization.

Las aplicaciones de mainframe que se modernizan mediante patrones de refactorización, como las de AWS Mainframe Modernization Refactor con AWS Blu Age, requieren una integración cuidadosa de los mecanismos de autenticación en la nueva arquitectura de la aplicación. Esta integración suele abordarse como una actividad posterior a la modernización. La tarea puede ser compleja y, a menudo, implica la migración o la externalización de los sistemas de autenticación existentes para alinearlos con los estándares de seguridad modernos y las prácticas nativas en la nube. Los desarrolladores deben considerar cómo implementar la autenticación de manera eficaz mientras trabajan dentro de las limitaciones del tiempo de ejecución y las bibliotecas de la aplicación modernizada. Tras la modernización, AWS proporciona formas de facilitar la integración del código moderno de AWS Blu Age con sistemas de administración de identidades y accesos, como Amazon Cognito y Microsoft Entra ID (anteriormente conocido como Azure AD).

Este patrón explica cómo implementar un mecanismo de autenticación en una aplicación modernizada cuando el proveedor de autenticación es Microsoft Entra ID, sin perder tiempo en investigaciones y pruebas. El patrón proporciona lo siguiente:

  • Bibliotecas de Angular pertinentes y probadas en campo de la Biblioteca de autenticación de Microsoft (MSAL) y otra documentación de Microsoft Entra ID que son esenciales para la implementación de la autenticación. 

  • Se requieren configuraciones en el entorno de ejecución de AWS Blu Age para habilitar Spring Security mediante la OAuth versión 2.0.

  • Una biblioteca que captura las identidades de los usuarios autenticados y las pasa al AWS Blu Age Runtime.

  • Medidas de seguridad que recomendamos implementar.

  • Sugerencias de solución de problemas frecuentes con la configuración de Microsoft Entra ID.

nota

Este patrón utiliza la biblioteca de OAuth extensiones AWS Blu Age, que se proporciona a los clientes como parte de su contratación con los servicios AWS profesionales. Esta biblioteca no forma parte de AWS Blu Age Runtime.

Requisitos previos y limitaciones

Requisitos previos 

  • Una aplicación modernizada que fue producida por las herramientas de refactorización y modernización de mainframes de AWS Blu Age. Este patrón se utiliza CardDemocomo ejemplo de una aplicación de mainframe de código abierto.

  • La biblioteca de OAuth extensiones de AWS Blu Age, proporcionada por el equipo de AWS Blu Age durante su contratación con AWS Professional Services.

  • Activa Cuenta de AWS para implementar y probar la aplicación modernizada.

  • Familiaridad con los archivos de configuración de AWS Blu Age y los fundamentos de Microsoft Entra ID.

Limitaciones

  • Este patrón abarca la autenticación OAuth 2.0 y los flujos básicos de autorización basados en tokens. Los escenarios de autorización avanzada y los mecanismos de control de acceso detallados no están dentro del alcance.

  • Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para obtener información sobre la disponibilidad en regiones, consulte Servicios de AWS by Region. Para ver los puntos de conexión específicos, consulte Service endpoints and quotas y elija el enlace del servicio.

Versiones de producto

Este patrón se desarrolló mediante lo siguiente:

  • AWS Blu Age Runtime versión 4.1.0 (el patrón también funciona con versiones posteriores compatibles con versiones anteriores)

  • Biblioteca MSAL, versión 3.0.23

  • Java Development Kit (JDK), versión 17

  • Angular, versión 16.1

Arquitectura

Pila de tecnología de origen

En los entornos de mainframe típicos, la autenticación se implementa a través de los perfiles de usuario. Estos perfiles identifican a los usuarios del sistema, definen quién puede iniciar sesión y especifican qué funciones pueden llevar a cabo los usuarios con los recursos del sistema. Los perfiles de usuario los administran los responsables de seguridad o los administradores de seguridad.

Pila de tecnología de destino

  • ID de Microsoft Entra

  • Backend modernizado basado en Java Spring Boot

  • AWS Blu Age Runtime

  • Spring Security con OAuth 2.0

  • Aplicación de una sola página de Angular (SPA)

Arquitectura de destino

AWS El tiempo de ejecución de Blu Age admite la autenticación OAuth basada en la versión 2.0 de forma predeterminada, por lo que el patrón utiliza ese estándar para proteger el backend APIs.

En el diagrama siguiente se ilustra el flujo del proceso.

nota

En el diagrama se incluye Amazon Aurora como ejemplo de modernización de bases de datos, aunque Aurora no se incluye en los pasos de este patrón.

Flujo del proceso para la autenticación basada en Entra ID para una aplicación de AWS Blu Age.

donde:

  1. Un usuario intenta autenticarse con Microsoft Entra ID.

  2. Microsoft Entra ID devuelve los tokens de actualización, acceso e ID que la aplicación utiliza en llamadas posteriores.

  3. El interceptor MSAL incluye el token de acceso en el Authorization encabezado de una solicitud HTTPS para llamar al Blu Age Runtime. AWS

  4. La extension-oauth biblioteca AWS Blu Age extrae la información del usuario del encabezado mediante un archivo de configuración de AWS Blu Age Runtime (application-main.yml) y coloca esta información en un SharedContext objeto para que la lógica empresarial pueda consumirla.

    nota

    SharedContextes un componente de tiempo de ejecución proporcionado por AWS Blu Age que gestiona la información de contexto y estado de la aplicación en toda la aplicación modernizada. Para obtener más información sobre los componentes y las actualizaciones de AWS Blu Age Runtime, consulta las notas de la versión de AWS Blu Age en la AWS Mainframe Modernization documentación. Para obtener más información sobre el application-main.yml archivo, consulte Configurar la configuración de AWS Blu Age Runtime en la AWS Mainframe Modernization documentación.

  5. El AWS Blu Age Runtime comprueba si el token está presente. 

    1. Si el token está presente, se comunica con Microsoft Entra ID para comprobar su validez. 

    2. Si el token no está presente, el AWS Blu Age Runtime devuelve un error con el código de estado HTTP 403.

  6. Si el token es válido, el AWS Blue Age Runtime permite que la lógica empresarial continúe. Si el token no es válido, AWS Blu Age Runtime devuelve un error con el código de estado HTTP 403.

OAuth Flujo de trabajo 2.0

Para ver un diagrama de alto nivel del flujo de trabajo OAuth 2.0, consulte la documentación de Microsoft Entra.

Tools (Herramientas)

Servicios de AWS

AWS Mainframe Modernizationproporciona herramientas y recursos para ayudarlo a planificar e implementar la migración y la modernización de los mainframes a los entornos de tiempo de ejecución AWS gestionados. Puede utilizar las funciones de refactorización de este servicio, que proporciona AWS Blu Age, para convertir y modernizar sus aplicaciones de mainframe antiguas.

nota

AWS Mainframe Modernization El servicio (experiencia de entorno de ejecución gestionado) ya no está abierto a nuevos clientes. Para obtener funcionalidades similares a las AWS Mainframe Modernization de Service (experiencia en entornos de ejecución gestionados), explore AWS Mainframe Modernization Service (experiencia autogestionada). Los clientes existentes pueden seguir utilizando el servicio con normalidad. Para obtener más información, consulte Cambio en la disponibilidad de AWS Mainframe Modernization.

Repositorio de código

La CardDemo aplicación se ha actualizado para demostrar la integración con Microsoft Entra ID. Puedes acceder al código de este patrón desde el GitHub repositorio.

Configuración de backend

Este patrón requiere cambios en el archivo de application-main.yml configuración para habilitar Spring Security mediante el uso de la OAuth versión 2.0 en la aplicación de fondo.  El archivo .yml tiene este aspecto:

gapwalk-application.security: enabled gapwalk-application: security: identity: oauth issuerUri: ${issuerUrl} claim: claims: - claimName: upn claimMapValue: username spring: autoconfigure: exclude: - org.springframework.boot.autoconfigure.security.oauth2.client.servlet.OAuth2ClientAutoConfiguration - org.springframework.boot.autoconfigure.security.oauth2.resource.servlet.OAuth2ResourceServerAutoConfiguration security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret} provider: azure authorization-grant-type: authorization_code redirect-uri: ${redirectUri} scope: openid provider: azure: authorization-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/authorize token-uri: ${gapwalk-application.security.issuerUri}/oauth2/v2.0/token jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys resourceserver: jwt: jwk-set-uri: ${gapwalk-application.security.issuerUri}/discovery/v2.0/keys

AWS Biblioteca de filtros de OAuth extensiones Blu Age

La biblioteca de OAuth extensiones de AWS Blu Age la proporciona el equipo de AWS Blu Age durante su contratación con AWS Professional Services.

Esta biblioteca lee la configuración claim.claims del archivo application-main.yml que se muestra en el bloque de código anterior. Esta configuración es una lista. Cada elemento de la lista proporciona dos valores: claimName y claimMapValue. claimName representa el nombre de una clave en un token web JSON (JWT) enviado por el frontend y claimMapValue es el nombre de la clave en SharedContext. Por ejemplo, si quieres capturar el ID de usuario en el backend, establezca claimName en el nombre de la clave en el JWT que contiene el valor de userId proporcionado por Microsoft Entra ID y establezca claimMapValue en el nombre de la clave para obtener el ID de usuario en el código del backend.

Por ejemplo, si establece UserId en claimMapValue, puede usar el siguiente código para extraer el ID de usuario:

SharedContext.get().getValue("userId", [UserId]);

Prácticas recomendadas

Al implementar este patrón, tenga en cuenta las siguientes consideraciones de seguridad importantes.

importante

Este patrón proporciona una base para la integración de la autenticación. Le recomendamos que implemente medidas de seguridad además de las descritas en esta sección en función de los requisitos de su empresa antes de implementarla en producción.

  • AWS seguridad de configuración.Mueva los valores de configuración confidenciales de application-main.yml a AWS Secrets Manager. Por ejemplo, configure las siguientes propiedades mediante Secrets Manager:

    security: oauth2: client: registration: azure: client-id: {clientId} client-secret: ${clientSecret}

    Para obtener más información sobre cómo usar Secrets Manager para configurar los parámetros de AWS Blu Age, consulta los secretos de AWS Blu Age Runtime en la AWS Mainframe Modernization documentación.

  • Protección del entorno del tiempo de ejecución. Configure el entorno de aplicaciones modernizado con los controles AWS de seguridad adecuados:

    server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
  • CloudWatch Registro de Amazon. Considere la posibilidad de agregar el archivo logback-spring.xml to src/main/resources:

    <configuration> <appender name="CLOUDWATCH" class="com.amazonaws.services.logs.logback.CloudWatchAppender"> <logGroup>/aws/bluage/application</logGroup> <logStream>${AWS_REGION}-${ENVIRONMENT}</logStream> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="INFO"> <appender-ref ref="CLOUDWATCH"/> </root> </configuration>

    Para obtener información sobre cómo habilitar el rastreo con la correlación CloudWatch, consulte Habilitar la correlación entre el rastreo y el registro en la CloudWatch documentación.

  • Configuración y gestión de tokens. Configure la vida útil de los tokens en Microsoft Entra ID para adaptarla a sus requisitos de seguridad. Configure los tokens de acceso para que caduquen en 1 hora y actualícelos para que caduquen en 24 horas. En la configuración de AWS Blu Age Runtime (application-main.yml), asegúrese de que la validación de JWT esté configurada correctamente con el URI del emisor y los valores de audiencia exactos del registro de la aplicación Entra ID.

    Cuando un token caduca y se actualiza:

    1. El interceptor de errores de la aplicación de Angular gestiona la respuesta 401 obteniendo un nuevo token a través de MSAL.

    2. El nuevo token se envía con la solicitud posterior.

    3. El OAuth filtro del AWS Blu Age Runtime valida el nuevo token y se actualiza automáticamente SharedContext con la información de usuario actual. Esto garantiza que la lógica empresarial siga teniendo acceso al contexto de usuario válido a través de las llamadas SharedContext.get().getValue().

    Para obtener más información sobre los componentes de AWS Blu Age Runtime y sus actualizaciones, consulta las notas de la versión de AWS Blu Age.

  • Seguridad del tiempo de ejecución de AWS Blu Age. La oauth2-ext biblioteca proporcionada por AWS Blu Age debe colocarse en la ubicación correcta del directorio compartido ({app-server-home}/shared/) con los permisos de archivo adecuados. Compruebe que la biblioteca extrae correctamente la información del usuario JWTs comprobando la población de SharedContext objetos en sus registros.

  • Configuración de notificaciones específicas. En application-main.yml, defina las notificaciones que necesita de Microsoft Entra ID de forma explícita. Por ejemplo, para capturar el correo electrónico y los roles del usuario, especifique lo siguiente:

    gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
  • Gestión de errores. Agregue el manejo de errores para abordar los errores de autenticación en su aplicación de Angular; por ejemplo:

    @Injectable() export class AuthErrorInterceptor implements HttpInterceptor { intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> { return next.handle(request).pipe( catchError((error: HttpErrorResponse) => { if (error.status === 401) { // Handle token expiration this.authService.login(); } if (error.status === 403) { // Handle unauthorized access this.router.navigate(['/unauthorized']); } return throwError(() => error); }) ); } }
  • Configuración del tiempo de espera de la sesión. Configure los ajustes de tiempo de espera de la sesión tanto en el AWS Blu Age Runtime como en el Microsoft Entra ID. Por ejemplo, agregue el siguiente código al archivo application-main.yml:

    server: servlet: session: timeout: 3600 # 1 hour in seconds
  • MsalGuard. Debe implementar la MsalGuard función en todas las rutas protegidas para evitar el acceso no autorizado. Por ejemplo:

    const routes: Routes = [ { path: '', redirectTo: '/transaction-runner', pathMatch: 'full' }, { path: 'transaction-runner', component: TransactionRunnerComponent, canActivate:guards }, { path: 'user-info', component: UserInfoComponent, canActivate:guards }, { path: 'term/:transid/:commarea', component: TermComponent, canActivate:guards }, { path: 'code', component: TransactionRunnerComponent } ];

    Se podrá acceder a las rutas que MsalGuard no estén protegidas sin autenticación, lo que podría exponer funciones confidenciales. Asegúrese de que todas las rutas que requieren autenticación incluyan las protecciones en su configuración.

Epics

TareaDescripciónHabilidades requeridas

Configurar una cuenta de Microsoft Azure para crear una instancia de Entra ID.

Para ver las opciones e instrucciones, consulte el sitio web de Microsoft Azure.

Desarrollador de aplicaciones

Configurar una instancia de Microsoft Entra ID en la aplicación.

Para obtener información sobre cómo agregar la autenticación de Microsoft Entra ID B2C (Azure AD B2C) a su SPA de Angular, consulte la documentación de Microsoft. En concreto:

  1. Registre su aplicación y los identificadores.

  2. Exponga el punto final de las transacciones de AWS Blu Age añadiendo y exponiendo un ámbito personalizado.  

  3. Tras definir el ámbito y la URL de la API, configure estos valores en las propiedades apiUri y apiScope del archivo environment.ts en el repositorio de código.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Clona el GitHub repositorio para obtener el código angular necesario para la autenticación.

Ejecuta el siguiente comando para clonar el GitHub repositorio que viene con este patrón en tu directorio de trabajo actual local:

git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git
Desarrollador de aplicaciones

Implemente el código modernizado de AWS Blu Age en un servidor Tomcat para implementar la autenticación.

Para configurar el entorno local que incluye Tomcat y el servidor de desarrollo Angular, siga los pasos de instalación proporcionados por el equipo de AWS Blu Age como parte de la interacción de los clientes con AWS los servicios profesionales.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Habilitar la seguridad del tiempo de ejecución de AWS Blu Age para proteger los puntos de conexión de la API de REST de AWS Blu Age.

Configure el application-main.yml archivo que utiliza el AWS Blu Age Runtime de la siguiente manera. Para ver un ejemplo de este archivo, consulte la sección Repositorio de código, incluida anteriormente en este patrón.

  • spring:security:oauth2:client:*habilita la compatibilidad con el cliente Spring Security OAuth 2.0. Sustituya la configuración por valores que sean específicos de la configuración de su instancia de Microsoft Entra ID.

  • spring:security:oauth2:resourceserverhabilita la compatibilidad con el servidor de recursos Spring Security OAuth 2.0.

  • gapwalk-application.security.issuerUri especifica la URL del proveedor de identidades para obtener información de configuración, como el punto de conexión de autorización, el punto de conexión de tokens, etc.

  • gapwalk-application.security.identity debe definirse en oauth.

  • gapwalk-application.security.claim.claimsespecifica la lista de notificaciones necesarias para capturar el usuario IDs y los nombres de usuario.  Para ver un ejemplo, consulte la sección Repositorio de código, incluida anteriormente en este patrón.

  • gapwalk-application.security debe definirse en enabled.

  • spring.autoconfigure.exclude debe eliminarse para habilitar la autenticación.

Desarrollador de aplicaciones

Incorporar el código de ejemplo de su entorno local a su base de código de Angular modernizada de Blu Age.

Para obtener información sobre cómo incorporar el ejemplo en su base de código angular modernizada de AWS Blu Age, consulte la sección sobre el repositorio de códigos que aparece anteriormente en este patrón.

Desarrollador de aplicaciones

Colocar la biblioteca oauth2-ext en el directorio compartido.

Coloque la biblioteca oauth2-ext en el directorio compartido del servidor de aplicaciones para que su aplicación modernizada de AWS Blu Age pueda usarla.Ejecute los siguientes comandos :

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Implementar la aplicación de frontend.

Ejecute los comandos siguientes para iniciar la aplicación de frontend de forma local:

npm install ng serve --ssl npm start
nota

Al agregar la marca --ssl al comando ng serve, se garantiza que el servidor de desarrollo utilice HTTPS, que es más seguro que otros protocolos y proporciona una mejor simulación de un entorno de producción.

Desarrollador de aplicaciones

Iniciar la aplicación de backend.

Inicie el servidor de Tomcat en Eclipse.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Probar la funcionalidad de inicio de sesión.

Acceda a la aplicación implementada localmente en http://localhost:4200 para comprobar que se pide a los usuarios que confirmen su identidad.

nota

Aquí se usa HTTP con fines ilustrativos. En un entorno de producción u otro entorno de acceso público, debe utilizar HTTPS por motivos de seguridad. Incluso para el desarrollo local, le recomendamos que configure HTTPS siempre que sea posible.

Debería aparecer el mensaje de inicio de sesión de Microsoft y los usuarios configurados en Microsoft Entra ID deberían poder acceder a la aplicación.

Desarrollador de aplicaciones

Probar el encabezado de la autorización de la solicitud.

nota

En los siguientes pasos, se usa la CardDemoaplicación como ejemplo. Los pasos de prueba para otras aplicaciones modernas variarán.

  1. Inicie la transacción CC00 en la CardDemo aplicación.

  2. Inicie sesión con las credenciales del usuario. Por ejemplo, si va a usar el taller autoguiado de nivel 3 de AWS Blu Age, puede usar el nombre USER0001 y la contraseña PASSWORD como credenciales.

  3. Abra la ventana Herramientas para desarrolladores en la misma pestaña de su navegador.

  4. Abra la pestaña Red y compruebe la solicitud enviada al backend http://localhost:8080/gapwalk-application/transaction.

  5. Compruebe el encabezado de la solicitud y verifique que ve un encabezado de autorización con el valor Bearer <token>, donde <token> es un valor generado por Microsoft Entra ID.

Desarrollador de aplicaciones

Probar la funcionalidad de cierre de sesión.

Elija Salir para cerrar sesión e intente acceder de nuevo a la aplicación. Debería ver un nuevo mensaje de inicio de sesión.

Desarrollador de aplicaciones

Resolución de problemas

ProblemaSolución

El token emitido por Microsoft Entra ID no es compatible con la seguridad de Spring Boot OAuth 2.0.

Para resolver el problema, consulta Microsoft Entra ID OAuth Flow en el OAuth blog.

Preguntas generales relacionadas con los tokens.

Para decodificar y ver el contenido de un token JWT, utilice el sitio web https://jwt.io/.

Recursos relacionados