Mettre en œuvre l'authentification basée sur l'identifiant Microsoft Entra dans une application centrale modernisée de AWS Blu Age - Recommandations AWS

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Mettre en œuvre l'authentification basée sur l'identifiant Microsoft Entra dans une application centrale modernisée de AWS Blu Age

Vishal Jaswani et Rimpy Tewani, Amazon Web Services

Récapitulatif

Les applications mainframe modernisées à l'aide de modèles de refactorisation, tels que ceux de AWS Mainframe Modernization Refactor with AWS Blu Age, nécessitent une intégration minutieuse des mécanismes d'authentification dans la nouvelle architecture applicative. Cette intégration est généralement considérée comme une activité de post-modernisation. La tâche peut être complexe et implique souvent la migration ou l'externalisation de systèmes d'authentification existants afin de les aligner sur les normes de sécurité modernes et les pratiques natives du cloud. Les développeurs doivent réfléchir à la manière d'implémenter efficacement l'authentification tout en respectant les contraintes de l'environnement d'exécution et des bibliothèques de l'application modernisée. Après la modernisation, vous AWS propose des moyens de faciliter l'intégration de votre code moderne AWS Blu Age aux systèmes de gestion des identités et des accès tels qu'Amazon Cognito et Microsoft Entra ID (anciennement connu sous le nom d'Azure AD).

Ce modèle explique comment implémenter un mécanisme d'authentification dans votre application modernisée lorsque le fournisseur d'authentification est Microsoft Entra ID, sans perdre de temps à effectuer des recherches et à effectuer des essais. Le patron fournit :

  • Bibliothèques angulaires pertinentes et testées sur le terrain provenant de la Microsoft Authentication Library (MSAL) et d'autres documents Microsoft Entra ID essentiels à la mise en œuvre de l'authentification. 

  • Configurations requises sur le AWS Blu Age Runtime pour activer Spring Security à l'aide de la OAuth version 2.0.

  • Une bibliothèque qui capture les identités des utilisateurs authentifiés et les transmet au AWS Blu Age Runtime.

  • Mesures de sécurité que nous recommandons de mettre en œuvre.

  • Conseils de dépannage pour les problèmes courants liés à la configuration de l'identifiant Microsoft Entra.

Note

Ce modèle utilise la bibliothèque d' OAuth extensions AWS Blu Age, qui est fournie aux clients dans le cadre de leur engagement en matière de services AWS professionnels. Cette bibliothèque ne fait pas partie du AWS Blu Age Runtime.

Conditions préalables et limitations

Prérequis

  • Une application modernisée produite par les outils de refactorisation de modernisation des ordinateurs centraux de AWS Blu Age. Ce modèle est utilisé CardDemocomme exemple d'application mainframe open source.

  • La bibliothèque d' OAuth extensions AWS Blu Age, fournie par l'équipe AWS Blu Age lors de votre engagement avec les services AWS professionnels.

  • Un actif Compte AWS pour déployer et tester l'application modernisée.

  • Connaissance des fichiers de configuration AWS Blu Age et des principes fondamentaux de Microsoft Entra ID.

Limites

  • Ce modèle couvre l'authentification OAuth 2.0 et les flux d'autorisation de base basés sur des jetons. Les scénarios d'autorisation avancés et les mécanismes de contrôle d'accès précis ne sont pas concernés.

  • Certains Services AWS ne sont pas disponibles du tout Régions AWS. Pour connaître la disponibilité par région, voir Services AWS par région. Pour des points de terminaison spécifiques, consultez Points de terminaison de service et quotas, puis choisissez le lien correspondant au service.

Versions du produit

Ce modèle a été développé en utilisant :

  • AWS Blu Age Runtime version 4.1.0 (le modèle fonctionne également avec les versions ultérieures rétrocompatibles)

  • bibliothèque MSAL version 3.0.23

  • Kit de développement Java (JDK) version 17

  • Version angulaire 16.1

Architecture

Pile technologique source

Dans les environnements mainframe classiques, l'authentification est mise en œuvre par le biais de profils utilisateur. Ces profils identifient les utilisateurs du système, définissent qui peut se connecter et spécifient les fonctions que les utilisateurs peuvent exécuter sur les ressources du système. Les profils utilisateur sont gérés par des responsables de la sécurité ou des administrateurs de sécurité.

Pile technologique cible

  • Identifiant Microsoft Entra

  • Backend Java Spring Boot modernisé

  • AWS Blue Age Runtime

  • Spring Security avec OAuth 2.0

  • Application angulaire à page unique (SPA)

Architecture cible

AWS Le moteur d'exécution Blu Age prend en charge l'authentification OAuth basée sur la version 2.0 par défaut. Le modèle utilise donc cette norme pour protéger le backend. APIs

Le schéma suivant illustre le déroulement du processus.

Note

Le schéma inclut Amazon Aurora comme exemple de modernisation de base de données, bien qu'Aurora ne soit pas inclus dans les étapes de ce modèle.

Flux de processus pour l'authentification basée sur l'identifiant Entra pour une application AWS Blu Age.

où :

  1. Un utilisateur essaie de s'authentifier avec l'identifiant Microsoft Entra.

  2. Microsoft Entra ID renvoie les jetons d'actualisation, d'accès et d'identification que l'application utilise lors des appels suivants.

  3. L'intercepteur MSAL inclut le jeton d'accès dans l'Authorizationen-tête d'une requête HTTPS pour appeler le AWS Blu Age Runtime.

  4. La extension-oauth bibliothèque AWS Blu Age extrait les informations utilisateur de l'en-tête à l'aide d'un fichier de configuration AWS Blu Age Runtime (application-main.yml) et place ces informations dans un SharedContext objet afin que la logique métier puisse les utiliser.

    Note

    SharedContextest un composant d'exécution fourni par AWS Blu Age qui gère le contexte de l'application et les informations d'état dans l'ensemble de l'application modernisée. Pour plus d'informations sur les composants et les mises à jour de AWS Blu Age Runtime, consultez les notes de mise à jour de AWS Blu Age dans la AWS Mainframe Modernization documentation. Pour plus d'informations sur le application-main.yml fichier, consultez la section Configuration de la configuration pour AWS Blu Age Runtime dans la AWS Mainframe Modernization documentation.

  5. Le AWS Blu Age Runtime vérifie si le jeton est présent. 

    1. Si le jeton est présent, il vérifie sa validité en communiquant avec l'identifiant Microsoft Entra. 

    2. Si le jeton n'est pas présent, le AWS Blu Age Runtime renvoie une erreur avec le code d'état HTTP 403.

  6. Si le jeton est valide, le AWS Blue Age Runtime permet à la logique métier de se poursuivre. Si le jeton n'est pas valide, le AWS Blu Age Runtime renvoie une erreur avec le code d'état HTTP 403.

OAuth flux de travail 2.0

Pour un schéma détaillé du flux de travail OAuth 2.0, consultez la documentation Microsoft Entra.

Outils

Services AWS

  • AWS Mainframe Modernizationfournit des outils et des ressources pour vous aider à planifier et à mettre en œuvre la migration et la modernisation des mainframes vers des environnements d'exécution AWS gérés. Vous pouvez utiliser les fonctionnalités de refactoring de ce service, fournies par AWS Blu Age, pour convertir et moderniser vos anciennes applications mainframe.

Référentiel de code

L' CardDemo application a été mise à jour pour démontrer l'intégration avec Microsoft Entra ID. Vous pouvez accéder au code depuis le GitHub référentiel de ce modèle.

Configuration du backend

Ce modèle nécessite des modifications du fichier application-main.yml de configuration pour activer Spring Security en utilisant la OAuth version 2.0 sur l'application principale.  Le .yml fichier ressemble à ceci :

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 Bibliothèque de filtres d' OAuth extension Blu Age

La bibliothèque d' OAuth extensions AWS Blu Age est fournie par l'équipe AWS Blu Age lors de votre engagement auprès des services AWS professionnels.

Cette bibliothèque lit la claim.claims configuration dans le application-main.yml fichier affiché dans le bloc de code précédent. Cette configuration est une liste. Chaque élément de la liste fournit deux valeurs : claimName etclaimMapValue. claimNamereprésente le nom d'une clé dans un jeton Web JSON (JWT) envoyé par le frontend et claimMapValue est le nom de la clé entrée. SharedContext Par exemple, si vous souhaitez capturer l'ID utilisateur sur le backend, définissez le nom claimName de la clé dans le JWT qui contient l'userIdID Microsoft Entra, et définissez le nom de la clé claimMapValue pour récupérer l'ID utilisateur dans le code du backend.

Par exemple, si vous le configurez UserIdclaimMapValue, vous pouvez utiliser le code suivant pour extraire l'ID utilisateur :

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

Bonnes pratiques

Lors de la mise en œuvre de ce modèle, tenez compte des considérations de sécurité importantes suivantes.

Important

Ce modèle constitue la base de l'intégration de l'authentification. Nous vous recommandons de mettre en œuvre des mesures de sécurité en plus de celles décrites dans cette section en fonction des besoins de votre entreprise avant de le déployer en production.

  • AWS sécurité de configuration.Déplacez les valeurs de configuration sensibles de application-main.yml à AWS Secrets Manager. Par exemple, configurez les propriétés suivantes à l'aide de Secrets Manager :

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

    Pour plus d'informations sur la façon dont vous pouvez utiliser Secrets Manager pour configurer les paramètres de AWS Blu Age, consultez les secrets de AWS Blu Age Runtime dans la AWS Mainframe Modernization documentation.

  • Protection de l'environnement d'exécution. Configurez l'environnement applicatif modernisé avec des contrôles AWS de sécurité appropriés :

    server: tomcat: remoteip: protocol-header: X-Forwarded-Proto remote-ip-header: X-Forwarded-For forward-headers-strategy: NATIVE
  • CloudWatch Journalisation sur Amazon. Pensez à ajouter le fichier 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>

    Pour plus d'informations sur l'activation du suivi avec CloudWatch, consultez la section Activer le traçage pour enregistrer la corrélation dans la CloudWatch documentation.

  • Configuration et gestion des jetons. Configurez la durée de vie des jetons dans Microsoft Entra ID pour répondre à vos exigences de sécurité. Définissez les jetons d'accès pour qu'ils expirent dans un délai d'une heure et actualisez les jetons pour qu'ils expirent dans les 24 heures. Dans la configuration de AWS Blu Age Runtime (application-main.yml), assurez-vous que la validation JWT est correctement configurée avec l'URI exact de l'émetteur et les valeurs d'audience indiquées lors de l'enregistrement de votre application Entra ID.

    Lorsqu'un jeton expire et est actualisé :

    1. L'intercepteur d'erreurs de l'application Angular gère la réponse 401 en obtenant un nouveau jeton via MSAL.

    2. Le nouveau jeton est envoyé avec la demande suivante.

    3. Le OAuth filtre du AWS Blu Age Runtime valide le nouveau jeton et se met automatiquement à jour SharedContext avec les informations utilisateur actuelles. Cela garantit que Business Logic continue d'avoir accès à un contexte utilisateur valide par le biais d'SharedContext.get().getValue()appels.

    Pour plus d'informations sur les composants de AWS Blu Age Runtime et leurs mises à jour, consultez les notes de mise à jour de AWS Blu Age.

  • Sécurité de l'environnement d'exécution AWS Blu Age. La oauth2-ext bibliothèque fournie par AWS Blu Age doit être placée dans le répertoire partagé approprié ({app-server-home}/shared/) avec les autorisations de fichier appropriées. Vérifiez que la bibliothèque extrait correctement les informations utilisateur JWTs en vérifiant la population SharedContext d'objets dans vos journaux.

  • Configuration des réclamations spécifiques. Dansapplication-main.yml, définissez explicitement les demandes dont vous avez besoin à partir de Microsoft Entra ID. Par exemple, pour capturer l'e-mail et les rôles de l'utilisateur, spécifiez :

    gapwalk-application: security: claim: claims: - claimName: upn claimMapValue: username - claimName: roles claimMapValue: userRoles - claimName: email claimMapValue: userEmail
  • Gestion des erreurs. Ajoutez la gestion des erreurs pour résoudre les échecs d'authentification dans votre application Angular ; par exemple :

    @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); }) ); } }
  • Configuration du délai d'expiration de session. Configurez les paramètres de temporisation de session dans le AWS Blu Age Runtime et dans le Microsoft Entra ID. Ajoutez par exemple le code suivant à votre application-main.yml fichier :

    server: servlet: session: timeout: 3600 # 1 hour in seconds
  • MsalGuard. Vous devez implémenter MsalGuard cette fonctionnalité pour tous les itinéraires protégés afin d'empêcher tout accès non autorisé. Par exemple :

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

    Les itinéraires non MsalGuard protégés seront accessibles sans authentification, ce qui peut exposer des fonctionnalités sensibles. Assurez-vous que toutes les routes qui nécessitent une authentification incluent les gardes dans leur configuration.

Épopées

TâcheDescriptionCompétences requises

Configurez un compte Microsoft Azure pour créer un identifiant Entra.

Pour les options et les instructions, consultez le site Web de Microsoft Azure.

Développeur d’applications

Configurez un identifiant Microsoft Entra dans votre application.

Pour savoir comment ajouter l'authentification Microsoft Entra ID B2C (Azure AD B2C) à votre Angular SPA, consultez la documentation Microsoft. En particulier :

  1. Enregistrez votre candidature et enregistrez les identifiants.

  2. Exposez le point de terminaison de transaction AWS Blu Age en ajoutant et en exposant une portée personnalisée.  

  3. Après avoir défini le champ d'application et l'URL de l'API, configurez ces valeurs dans les apiScope propriétés apiUri et du environment.ts fichier dans le référentiel de code.

Développeur d’applications
TâcheDescriptionCompétences requises

Clonez le GitHub référentiel pour obtenir le code angulaire requis pour l'authentification.

Exécutez la commande suivante pour cloner le GitHub référentiel fourni avec ce modèle dans votre répertoire de travail local actuel :

git clone https://github.com/aws-samples/sample-microsoft-entra-id-based-auth-in-aws-bluage-modernized-mainframe-app.git
Développeur d’applications

Déployez le code modernisé AWS Blu Age sur un serveur Tomcat pour implémenter l'authentification.

Pour configurer l'environnement local qui inclut Tomcat et le serveur de développement Angular, suivez les étapes d'installation fournies par l'équipe AWS Blu Age dans le cadre de votre engagement client auprès des services AWS professionnels.

Développeur d’applications
TâcheDescriptionCompétences requises

Activez la sécurité d'AWS Blu Age Runtime pour protéger les points de terminaison de l'API REST AWS Blu Age.

Configurez le application-main.yml fichier utilisé par le AWS Blu Age Runtime comme suit. Pour un exemple de ce fichier, consultez la section Référentiel de code plus haut dans ce modèle.

  • spring:security:oauth2:client:*active le support client Spring Security OAuth 2.0. Remplacez les paramètres par des valeurs spécifiques à la configuration de votre identifiant Microsoft Entra.

  • spring:security:oauth2:resourceserverpermet le support du serveur de ressources Spring Security OAuth 2.0.

  • gapwalk-application.security.issuerUrispécifie l'URL du fournisseur d'identité pour récupérer les informations de configuration telles que le point de terminaison d'autorisation, le point de terminaison du jeton, etc.

  • gapwalk-application.security.identitydoit être réglé suroauth.

  • gapwalk-application.security.claim.claimsspécifie la liste des demandes requises pour saisir les noms d'utilisateur IDs et d'utilisateur.  Pour un exemple, consultez la section Référentiel de code plus haut dans ce modèle.

  • gapwalk-application.securitydoit être réglé surenabled.

  • spring.autoconfigure.excludedoit être supprimé pour permettre l'authentification.

Développeur d’applications

Intégrez l'exemple de code de votre environnement local dans votre base de code Angular modernisée de Blu Age.

Pour plus d'informations sur la façon d'intégrer l'exemple dans votre base de code Angular modernisée de AWS Blu Age, consultez la section Référentiel de code plus haut dans ce modèle.

Développeur d’applications

Placez la oauth2-ext bibliothèque dans le répertoire partagé.

Placez la oauth2-ext bibliothèque dans le répertoire partagé du serveur d'applications afin que votre application AWS Blu Age modernisée puisse l'utiliser.Exécutez les commandes suivantes :

cd oauth2-ext/target cp extension-oauth-filter-<version>.jar /{app-server-home}/shared/
Développeur d’applications
TâcheDescriptionCompétences requises

Déployez l'application frontale.

Exécutez les commandes suivantes pour démarrer l'application frontale localement :

npm install ng serve --ssl npm start
Note

L'ajout de l'--sslindicateur à la ng serve commande garantit que le serveur de développement utilise le protocole HTTPS, qui est plus sécurisé que les autres protocoles et fournit une meilleure simulation d'un environnement de production.

Développeur d’applications

Démarrez l'application principale.

Démarrez le serveur Tomcat dans Eclipse.

Développeur d’applications
TâcheDescriptionCompétences requises

Testez la fonctionnalité de connexion.

Accédez à l'application déployée localement http://localhost:4200 à l'adresse pour vérifier que les utilisateurs sont invités à confirmer leur identité.

Note

Le protocole HTTP est utilisé ici à des fins de démonstration. Dans un environnement de production ou accessible au public, vous devez utiliser le protocole HTTPS pour des raisons de sécurité. Même pour le développement local, nous vous recommandons de configurer le protocole HTTPS lorsque cela est possible.

L'invite de connexion Microsoft devrait apparaître et les utilisateurs configurés avec l'identifiant Microsoft Entra devraient être autorisés à accéder à l'application.

Développeur d’applications

Testez l'en-tête d'autorisation dans la demande.

Note

Les étapes suivantes utilisent l'CardDemoapplication comme exemple. Les étapes de test pour les autres applications modernes peuvent varier.

  1. Lancez la transaction CC00 dans l' CardDemo application.

  2. Connectez-vous à l'aide des informations d'identification de l'utilisateur. Par exemple, si vous participez à l'atelier d'AWS auto-apprentissage Blu Age de niveau 3, vous pouvez utiliser le nom USER0001 et le mot de passe comme informations PASSWORD d'identification.

  3. Ouvrez la fenêtre Outils de développement dans le même onglet de votre navigateur.

  4. Ouvrez l'onglet Réseau et vérifiez la demande envoyée au backendhttp://localhost:8080/gapwalk-application/transaction.

  5. Vérifiez l'en-tête de demande et vérifiez que vous voyez un en-tête d'autorisation avec la valeur Bearer <token> Where <token> est une valeur générée par l'identifiant Microsoft Entra.

Développeur d’applications

Testez la fonctionnalité de déconnexion.

Choisissez Quitter pour vous déconnecter, puis réessayez d'accéder à l'application. Il devrait présenter une nouvelle invite de connexion.

Développeur d’applications

Résolution des problèmes

ProblèmeSolution

Le jeton émis par Microsoft Entra ID n'est pas compatible avec la sécurité Spring Boot OAuth 2.0.

Pour trouver une solution à ce problème, consultez Microsoft Entra ID OAuth Flow sur le OAuth blog.

Questions générales relatives aux jetons.

Pour décoder et afficher le contenu d'un jeton JWT, utilisez le site Web https://jwt.io/.

Ressources connexes