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

Las aplicaciones de mainframe que se modernizan mediante patrones de refactorización, como las de Refactor con AWS Blu Age, requieren una integración cuidadosa de los mecanismos de AWS Mainframe Modernization 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 de la nube. Los desarrolladores deben considerar cómo implementar la autenticación de manera eficaz mientras trabajan dentro de las limitaciones del entorno 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:

  • Bibliotecas angulares relevantes 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 el uso de la versión 2.0. OAuth

  • 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 del 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 creada 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 incluidos en el ámbito de aplicación.

  • Algunos Servicios de AWS no están disponibles en todos. Regiones de AWS Para ver la disponibilidad por región, consulta Servicios de AWS por región. Para ver puntos de enlace específicos, consulta Puntos de enlace y cuotas del servicio y elige el enlace para el servicio.

Versiones de producto

Este patrón se desarrolló mediante el uso de:

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

  • Librería MSAL, versión 3.0.23

  • Kit de desarrollo de Java (JDK) versión 17

  • Versión angular 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 realizar los usuarios con los recursos del sistema. Los perfiles de usuario los administran oficiales de seguridad o administradores de seguridad.

Pila de tecnología de destino

  • ID de Microsoft Entra

  • Backend modernizado basado en Java Spring Boot

  • AWS Tiempo de ejecución de Blue Age

  • Spring Security con OAuth 2.0

  • Aplicación angular de una sola página (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

El siguiente diagrama ilustra el flujo del proceso.

nota

El diagrama 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 de proceso para la autenticación basada en el ID de Entra para una aplicación de AWS Blu Age.

donde:

  1. Un usuario intenta autenticarse con el 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 AWS Blu Age Runtime.

  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, comprueba su validez comunicándose con Microsoft Entra ID. 

    2. Si el token no está presente, 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.

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.

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 backend.  El .yml archivo 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 claim.claims configuración del application-main.yml archivo 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 yclaimMapValue. claimNamerepresenta el nombre de una clave en un token web JSON (JWT) enviado por la interfaz y claimMapValue es el nombre de la clave. SharedContext Por ejemplo, si quieres capturar el ID de usuario en el backend, claimName configúralo en el nombre de la clave en el JWT que contiene el userId ID de Microsoft Entra y configúralo en el nombre de la clave claimMapValue para obtener el ID de usuario en el código del backend.

Por ejemplo, si lo UserId configurasclaimMapValue, puedes 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 implementarlas 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 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. Considera añadir el archivologback-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 CloudWatch, consulte Habilitar la correlación entre el rastreo y el registro en la CloudWatch documentación.

  • Configuración y manejo de los tokens. Configure la vida útil de los tokens en Microsoft Entra ID para adaptarla a sus requisitos de seguridad. Configura los tokens de acceso para que caduquen en 1 hora y actualízalos 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 de su registro en la aplicación Entra ID.

    Cuando un token caduca y se actualiza:

    1. El interceptor de errores de la aplicación 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 de AWS Blu Age Runtime valida el nuevo token y se actualiza automáticamente SharedContext con la información del usuario actual. Esto garantiza que la lógica empresarial siga teniendo acceso al contexto de usuario válido a través de SharedContext.get().getValue() las llamadas.

    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 en 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 reclamaciones específica. Enapplication-main.yml, defina las afirmaciones que necesita de Microsoft Entra ID de forma explícita. Por ejemplo, para capturar el correo electrónico y las funciones del usuario, especifique:

    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 las fallas de autenticación en su aplicación 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, agrega el siguiente código a tu application-main.yml archivo:

    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

Configure una cuenta de Microsoft Azure para crear un ID de Entra.

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

Desarrollador de aplicaciones

Configura un Microsoft Entra ID en tu aplicación.

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

  1. Registre su solicitud y registre los identificadores.

  2. Exponga el punto final de la transacción de AWS Blu Age añadiendo y exponiendo un ámbito personalizado.  

  3. Después de definir el alcance y la URL de la API, configure estos valores en apiUri las apiScope propiedades del environment.ts archivo 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

Habilite la seguridad de AWS Blu Age Runtime para proteger los puntos de conexión de la API 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 del repositorio de código que aparece 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 específicos de la configuración de su Microsoft Entra ID.

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

  • gapwalk-application.security.issuerUriespecifica la URL del proveedor de identidad para obtener información de configuración, como el punto final de autorización, el punto final del token, etc.

  • gapwalk-application.security.identitydebe configurarse 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 que aparece anteriormente en este patrón.

  • gapwalk-application.securitydebe configurarse enenabled.

  • spring.autoconfigure.excludedebe eliminarse para permitir la autenticación.

Desarrollador de aplicaciones

Incorpore el código de ejemplo de su entorno local a su base de código 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ódigo que aparece anteriormente en este patrón.

Desarrollador de aplicaciones

Coloca la oauth2-ext biblioteca en el directorio compartido.

Coloque la oauth2-ext biblioteca 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

Implemente la aplicación frontend.

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

npm install ng serve --ssl npm start
nota

Al añadir la --ssl marca al ng serve comando, 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

Inicie la aplicación de backend.

Inicie el servidor Tomcat en Eclipse.

Desarrollador de aplicaciones
TareaDescripciónHabilidades requeridas

Pruebe 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 utiliza HTTP con fines de demostración. 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

Pruebe el encabezado de autorización de la solicitud.

nota

En los siguientes pasos, se utiliza 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 de usuario. Por ejemplo, si vas a asistir al taller a tu propio ritmo de nivel 3 de AWS Blu Age, puedes usar el nombre USER0001 y la contraseña como credencialesPASSWORD.

  3. Abre la ventana de herramientas para desarrolladores en la misma pestaña de tu navegador.

  4. Abre la pestaña Red y comprueba la solicitud enviada al backendhttp://localhost:8080/gapwalk-application/transaction.

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

Desarrollador de aplicaciones

Pruebe la funcionalidad de cierre de sesión.

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

Desarrollador de aplicaciones

Solució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