Implementa l'autenticazione basata su Microsoft Entra ID in un'applicazione mainframe modernizzata AWS Blu Age - Prontuario AWS

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Implementa l'autenticazione basata su Microsoft Entra ID in un'applicazione mainframe modernizzata AWS Blu Age

Vishal Jaswani e Rimpy Tewani, Amazon Web Services

Riepilogo

Le applicazioni mainframe modernizzate utilizzando modelli di refactoring, come quelle di Modernizzazione del mainframe AWS Refactor con AWS Blu Age, richiedono un'attenta integrazione dei meccanismi di autenticazione nella nuova architettura applicativa. Questa integrazione viene in genere considerata un'attività di post-modernizzazione. L'attività può essere complessa e spesso comporta la migrazione o l'esternalizzazione dei sistemi di autenticazione esistenti per allinearli ai moderni standard di sicurezza e alle pratiche native del cloud. Gli sviluppatori devono considerare come implementare l'autenticazione in modo efficace mentre lavorano entro i limiti dell'ambiente di runtime e delle librerie dell'applicazione modernizzata. Dopo la modernizzazione, AWS offre modi per semplificare l'integrazione del codice moderno AWS Blu Age con sistemi di gestione delle identità e degli accessi come Amazon Cognito e Microsoft Entra ID (precedentemente noto come Azure AD).

Questo modello spiega come implementare un meccanismo di autenticazione nell'applicazione modernizzata quando il provider di autenticazione è Microsoft Entra ID, senza perdere tempo in ricerche e prove. Il modello prevede:

  • Librerie Angular testate sul campo e pertinenti della Microsoft Authentication Library (MSAL) e altra documentazione Microsoft Entra ID che sono essenziali per l'implementazione dell'autenticazione. 

  • Configurazioni richieste su AWS Blu Age Runtime per abilitare Spring Security utilizzando 2.0. OAuth

  • Una libreria che acquisisce le identità degli utenti autenticati e le trasmette a Blu Age Runtime. AWS

  • Misure di sicurezza che consigliamo di implementare.

  • Suggerimenti per la risoluzione dei problemi più comuni relativi alla configurazione dell'ID Microsoft Entra.

Nota

Questo modello utilizza la libreria di OAuth estensioni AWS Blu Age, fornita ai clienti nell'ambito dei servizi AWS professionali. Questa libreria non fa parte di AWS Blu Age Runtime.

Prerequisiti e limitazioni

Prerequisiti

  • Un'applicazione modernizzata prodotta dagli strumenti di refactoring per la modernizzazione del mainframe AWS Blu Age. Questo modello utilizza CardDemocome esempio un'applicazione mainframe open source.

  • La libreria di OAuth estensioni AWS Blu Age, fornita dal team AWS Blu Age durante la collaborazione con AWS Professional Services.

  • Un attivo Account AWS per implementare e testare l'applicazione modernizzata.

  • Familiarità con i file di configurazione AWS Blu Age e i fondamenti dell'ID Microsoft Entra.

Limitazioni

  • Questo modello copre l'autenticazione OAuth 2.0 e i flussi di autorizzazione di base basati su token. Gli scenari di autorizzazione avanzati e i meccanismi di controllo degli accessi dettagliati non rientrano nell'ambito di applicazione.

  • Alcuni Servizi AWS non sono disponibili in tutti. Regioni AWS Per la disponibilità per regione, vedi Servizi AWS per regione. Per endpoint specifici, consulta Endpoints and quotas del servizio e scegli il link relativo al servizio.

Versioni del prodotto

Questo modello è stato sviluppato utilizzando:

  • AWS Blu Age Runtime versione 4.1.0 (il pattern funziona anche con le versioni successive che sono retrocompatibili)

  • Libreria MSAL versione 3.0.23

  • Java Development Kit (JDK) versione 17

  • Versione Angular 16.1

Architettura

Stack di tecnologia di origine

Nei tipici ambienti mainframe, l'autenticazione viene implementata tramite profili utente. Questi profili identificano gli utenti del sistema, definiscono chi può accedere e specificano quali funzioni gli utenti possono eseguire sulle risorse di sistema. I profili utente sono gestiti dai responsabili della sicurezza o dagli amministratori della sicurezza.

Stack tecnologico Target

  • ID Microsoft Entra

  • Backend modernizzato basato su Java Spring Boot

  • AWS Blu Age Runtime

  • Spring Security con OAuth 2.0

  • Applicazione angolare a pagina singola (SPA)

Architettura Target

AWS Il runtime Blu Age supporta l'autenticazione OAuth basata su 2.0 per impostazione predefinita, quindi il pattern utilizza quello standard per proteggere il backend APIs.

Il diagramma seguente illustra il flusso del processo.

Nota

Il diagramma include Amazon Aurora come esempio di modernizzazione del database, sebbene Aurora non sia inclusa nei passaggi di questo modello.

Flusso di processo per l'autenticazione basata su Entra ID per un'applicazione AWS Blu Age.

dove:

  1. Un utente tenta di autenticarsi con l'ID Microsoft Entra.

  2. L'ID Microsoft Entra restituisce i token di aggiornamento, accesso e ID utilizzati dall'applicazione nelle chiamate successive.

  3. L'interceptor MSAL include il token di accesso nell'Authorizationintestazione di una richiesta HTTPS per chiamare Blu Age Runtime. AWS

  4. La extension-oauth libreria AWS Blu Age estrae le informazioni dell'utente dall'intestazione utilizzando un file di configurazione AWS Blu Age Runtime (application-main.yml) e inserisce queste informazioni in un SharedContext oggetto in modo che la logica aziendale possa utilizzarle.

    Nota

    SharedContextè un componente di runtime fornito da AWS Blu Age che gestisce il contesto e le informazioni sullo stato dell'applicazione modernizzata. Per ulteriori informazioni sui componenti e sugli aggiornamenti di AWS Blu Age Runtime, consulta le note di rilascio di AWS Blu Age nella Modernizzazione del mainframe AWS documentazione. Per ulteriori informazioni sul application-main.yml file, consulta Configurare la configurazione per AWS Blu Age Runtime nella Modernizzazione del mainframe AWS documentazione.

  5. Il AWS Blu Age Runtime verifica se il token è presente. 

    1. Se il token è presente, ne verifica la validità comunicando con Microsoft Entra ID. 

    2. Se il token non è presente, AWS Blu Age Runtime restituisce un errore con il codice di stato HTTP 403.

  6. Se il token è valido, AWS Blue Age Runtime consente alla logica aziendale di continuare. Se il token non è valido, AWS Blu Age Runtime restituisce un errore con il codice di stato HTTP 403.

OAuth Flusso di lavoro 2.0

Per un diagramma di alto livello del flusso di lavoro OAuth 2.0, consulta la documentazione di Microsoft Entra.

Strumenti

Servizi AWS

  • Modernizzazione del mainframe AWSfornisce strumenti e risorse per aiutarvi a pianificare e implementare la migrazione e la modernizzazione dai mainframe agli AWS ambienti di runtime gestiti. È possibile utilizzare le funzionalità di refactoring di questo servizio, fornite da AWS Blu Age, per convertire e modernizzare le applicazioni mainframe esistenti.

Archivio di codice

L' CardDemo applicazione è stata aggiornata per dimostrare l'integrazione con Microsoft Entra ID. È possibile accedere al codice dal GitHub repository per questo pattern.

Configurazione del backend

Questo modello richiede modifiche al file di application-main.yml configurazione per abilitare Spring Security utilizzando OAuth 2.0 sull'applicazione di backend.  Il .yml file ha il seguente aspetto:

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 Libreria di filtri di OAuth estensione Blu Age

La libreria di OAuth estensioni AWS Blu Age viene fornita dal team AWS Blu Age durante la collaborazione con AWS Professional Services.

Questa libreria legge la claim.claims configurazione nel application-main.yml file mostrata nel blocco di codice precedente. Questa configurazione è un elenco. Ogni elemento dell'elenco fornisce due valori: claimName eclaimMapValue. claimNamerappresenta un nome di chiave in un JSON Web Token (JWT) inviato dal frontend ed claimMapValue è il nome della chiave in ingresso. SharedContext Ad esempio, se desideri acquisire l'ID utente sul backend, imposta claimName il nome della chiave nel JWT che contiene l'ID userId that fornito da Microsoft Entra e imposta il nome della chiave claimMapValue per recuperare l'ID utente nel codice di backend.

Ad esempio, se si imposta UserIdclaimMapValue, è possibile utilizzare il codice seguente per estrarre l'ID utente:

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

Best practice

Nell'implementazione di questo modello, tenete conto delle seguenti importanti considerazioni sulla sicurezza.

Importante

Questo modello fornisce una base per l'integrazione dell'autenticazione. Si consiglia di implementare misure di sicurezza oltre a quelle illustrate in questa sezione in base ai requisiti aziendali prima di implementarlo in produzione.

  • AWS sicurezza della configurazione.Sposta i valori di configurazione sensibili da application-main.yml a AWS Secrets Manager. Ad esempio, configura le seguenti proprietà utilizzando Secrets Manager:

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

    Per ulteriori informazioni su come utilizzare Secrets Manager per configurare i parametri AWS Blu Age, consulta AWS Blu Age Runtime secrets nella Modernizzazione del mainframe AWS documentazione.

  • Protezione dell'ambiente di runtime. Configura l'ambiente applicativo modernizzato con controlli di AWS sicurezza adeguati:

    server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
  • CloudWatch Registrazione su Amazon. Valuta la possibilità di aggiungere il filelogback-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>

    Per informazioni sull'abilitazione del tracciamento con CloudWatch, consulta Enable trace to log correlation nella CloudWatch documentazione.

  • Configurazione e gestione dei token. Configura la durata dei token in Microsoft Entra ID per allinearla ai tuoi requisiti di sicurezza. Imposta la scadenza dei token di accesso entro 1 ora e aggiorna i token in modo che scadano entro 24 ore. Nella configurazione AWS Blu Age Runtime (application-main.yml), assicurati che la convalida JWT sia configurata correttamente con l'URI esatto dell'emittente e i valori di audience rilevati durante la registrazione dell'applicazione Entra ID.

    Quando un token scade e viene aggiornato:

    1. L'intercettore degli errori dell'applicazione Angular gestisce la risposta 401 ottenendo un nuovo token tramite MSAL.

    2. Il nuovo token viene inviato con la richiesta successiva.

    3. Il OAuth filtro di AWS Blu Age Runtime convalida il nuovo token e si aggiorna automaticamente SharedContext con le informazioni utente correnti. Ciò garantisce che la business logic continui ad avere accesso a un contesto utente valido tramite SharedContext.get().getValue() chiamate.

    Per ulteriori informazioni sui componenti AWS Blu Age Runtime e sui relativi aggiornamenti, consulta le note di rilascio di AWS Blu Age.

  • Sicurezza di AWS Blu Age Runtime. La oauth2-ext libreria fornita da AWS Blu Age deve essere collocata nella posizione corretta della directory condivisa ({app-server-home}/shared/) con le autorizzazioni appropriate per i file. Verifica che la libreria estragga correttamente le informazioni dell'utente JWTs controllando la popolazione degli SharedContext oggetti nei tuoi log.

  • Configurazione dei reclami specifici. Nelapplication-main.yml, definisci in modo esplicito le attestazioni di cui hai bisogno da Microsoft Entra ID. Ad esempio, per acquisire l'e-mail e i ruoli dell'utente, specifica:

    gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
  • Gestione degli errori. Aggiungi la gestione degli errori per risolvere gli errori di autenticazione nella tua applicazione Angular; ad esempio:

    @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); }) ); } }
  • Configurazione del timeout della sessione. Configura le impostazioni di timeout della sessione sia in AWS Blu Age Runtime che in Microsoft Entra ID. Ad esempio, aggiungi il codice seguente al tuo application-main.yml file:

    server: servlet: session: timeout: 3600 # 1 hour in seconds
  • MsalGuard. È necessario implementare la MsalGuard funzionalità per tutte le rotte protette per impedire l'accesso non autorizzato. Per esempio:

    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 } ];

    Le rotte prive di MsalGuard protezione saranno accessibili senza autenticazione, esponendo potenzialmente funzionalità riservate. Assicurati che tutte le rotte che richiedono l'autenticazione includano le guardie nella loro configurazione.

Epiche

AttivitàDescrizioneCompetenze richieste

Configura un account Microsoft Azure per creare un ID Entra.

Per opzioni e istruzioni, consulta il sito Web di Microsoft Azure.

Sviluppatore di app

Configura un ID Microsoft Entra nella tua applicazione.

Per sapere come aggiungere l'autenticazione Microsoft Entra ID B2C (Azure AD B2C) alla tua Angular SPA, consulta la documentazione Microsoft. Nello specifico:

  1. Registra la tua applicazione e registra gli identificatori.

  2. Esponi l'endpoint di transazione AWS Blu Age aggiungendo ed esponendo un ambito personalizzato.  

  3. Dopo aver definito l'ambito e l'URL dell'API, configura questi valori apiUri e le apiScope proprietà del environment.ts file nel repository di codice.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Clona il GitHub repository per ottenere il codice Angular richiesto per l'autenticazione.

Esegui il seguente comando per clonare il GitHub repository fornito con questo pattern nella tua directory di lavoro corrente locale:

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

Implementa il codice modernizzato AWS Blu Age su un server Tomcat per implementare l'autenticazione.

Per configurare l'ambiente locale che include Tomcat e il server di sviluppo Angular, segui i passaggi di installazione forniti dal team AWS Blu Age nell'ambito del coinvolgimento dei clienti con Professional Services. AWS

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Abilita la sicurezza di AWS Blu Age Runtime per proteggere gli endpoint dell'API REST di AWS Blu Age.

Configura il application-main.yml file utilizzato da AWS Blu Age Runtime come segue. Per un esempio di questo file, consultate la sezione Code repository riportata in precedenza in questo modello.

  • spring:security:oauth2:client:*abilita il supporto client Spring Security OAuth 2.0. Sostituisci le impostazioni con valori specifici per la configurazione del tuo ID Microsoft Entra.

  • spring:security:oauth2:resourceserverabilita il supporto del server di risorse Spring Security OAuth 2.0.

  • gapwalk-application.security.issuerUrispecifica l'URL del provider di identità per il recupero di informazioni di configurazione come l'endpoint di autorizzazione, l'endpoint del token e così via.

  • gapwalk-application.security.identitydeve essere impostato su. oauth

  • gapwalk-application.security.claim.claimsspecifica l'elenco delle attestazioni richieste per acquisire utenti IDs e nomi utente.  Per un esempio, consultate la precedente sezione Code repository in questo modello.

  • gapwalk-application.securitydeve essere impostato su. enabled

  • spring.autoconfigure.excludedeve essere rimosso per abilitare l'autenticazione.

Sviluppatore di app

Incorpora il codice di esempio dal tuo ambiente locale nella tua base di codice Angular modernizzata di Blu Age.

Per informazioni su come incorporare l'esempio nella tua base di codice Angular modernizzata da AWS Blu Age, consulta la sezione Code repository precedente in questo modello.

Sviluppatore di app

Posiziona la oauth2-ext libreria nella directory condivisa.

Posiziona la oauth2-ext libreria nella directory condivisa del server delle applicazioni in modo che la tua applicazione modernizzata AWS Blu Age possa utilizzarla.Esegui i comandi seguenti:

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Implementa l'applicazione frontend.

Esegui i seguenti comandi per avviare l'applicazione frontend localmente:

npm install ng serve --ssl npm start
Nota

L'aggiunta del --ssl flag al ng serve comando garantisce che il server di sviluppo utilizzi HTTPS, che è più sicuro di altri protocolli e fornisce una migliore simulazione di un ambiente di produzione.

Sviluppatore di app

Avvia l'applicazione di backend.

Avvia il server Tomcat in Eclipse.

Sviluppatore di app
AttivitàDescrizioneCompetenze richieste

Verifica la funzionalità di accesso.

Accedi all'applicazione distribuita localmente all'indirizzo http://localhost:4200 per verificare che agli utenti venga chiesto di confermare la propria identità.

Nota

HTTP viene utilizzato qui a scopo dimostrativo. In un ambiente di produzione o in un altro ambiente accessibile al pubblico, è necessario utilizzare HTTPS per motivi di sicurezza. Anche per lo sviluppo locale, ti consigliamo di configurare HTTPS quando possibile.

Dovrebbe apparire la richiesta di accesso Microsoft e gli utenti configurati in Microsoft Entra ID dovrebbero poter accedere all'applicazione.

Sviluppatore di app

Verifica l'intestazione di autorizzazione nella richiesta.

Nota

I passaggi seguenti utilizzano l'CardDemoapplicazione come esempio. Le fasi di test per altre applicazioni moderne possono variare.

  1. Avvia la transazione CC00 nell' CardDemo applicazione.

  2. Accedi con le credenziali utente. Ad esempio, se stai utilizzando il workshop di autoapprendimento AWS Blu Age di livello 3, puoi utilizzare il nome USER0001 e la password PASSWORD come credenziali.

  3. Apri la finestra Strumenti per sviluppatori nella stessa scheda del browser.

  4. Apri la scheda Rete e controlla la richiesta inviata al backendhttp://localhost:8080/gapwalk-application/transaction.

  5. Controlla l'intestazione della richiesta e verifica di visualizzare un'intestazione di autorizzazione con il valore Bearer <token> where <token> è un valore generato da Microsoft Entra ID.

Sviluppatore di app

Verifica la funzionalità di disconnessione.

Scegli Esci per disconnetterti e riprova ad accedere all'applicazione. Dovrebbe presentare una nuova richiesta di accesso.

Sviluppatore di app

Risoluzione dei problemi

ProblemaSoluzione

Il token emesso da Microsoft Entra ID non è compatibile con la sicurezza Spring Boot OAuth 2.0.

Per una risoluzione del problema, vedi Microsoft Entra ID OAuth Flow sul OAuth blog.

Domande generali relative ai token.

Per decodificare e visualizzare il contenuto di un token JWT, utilizza il sito Web https://jwt.io/.

Risorse correlate