Partager via


Tutoriel : Ajouter l'authentification et la déconnexion à votre application à une seule page Angular

S’applique à : cercle vert avec un symbole de coche blanc qui indique que le contenu suivant s’applique aux locataires du personnel. Cercle vert des locataires de main-d’œuvre avec un symbole de coche blanche qui indique que le contenu suivant s’applique aux locataires externes. Locataires externes (en savoir plus)

Ce tutoriel fait partie 2 d’une série qui illustre la création d’une application monopage Angular (SPA) et l’ajout d’authentification à l’aide de la plateforme d’identités Microsoft. Dans la partie 1 de cette série, vous avez créé un SPA Angular et ajouté des configurations initiales.

Dans ce tutoriel, vous allez :

  • Ajouter les options de connexion et de déconnexion

Prérequis

Ajoutez des fonctionnalités de connexion et de déconnexion à votre application

Dans cette section, vous allez ajouter des composants pour prendre en charge la fonctionnalité de connexion et de déconnexion dans votre application Angular. Ces composants permettent aux utilisateurs d’authentifier et de gérer leurs sessions. Vous allez ajouter le routage à l’application pour diriger les utilisateurs vers les composants appropriés en fonction de leur état d’authentification.

Pour activer la fonctionnalité de connexion et de déconnexion dans votre application Angular, procédez comme suit :

  1. Ouvrez le fichier src/app/app.component.html et remplacez son contenu par le code suivant.

    <a class="navbar navbar-dark bg-primary" variant="dark" href="/">
        <a class="navbar-brand"> Microsoft Identity Platform </a>
        <a>
            <button *ngIf="!loginDisplay" class="btn btn-secondary" (click)="login()">Sign In</button>
            <button *ngIf="loginDisplay" class="btn btn-secondary" (click)="logout()">Sign Out</button>
        </a>
    </a>
    <a class="profileButton">
        <a [routerLink]="['profile']" class="btn btn-secondary" *ngIf="loginDisplay">View Profile</a> 
    </a>
    <div class="container">
        <router-outlet></router-outlet>
    </div>
    

    Le code implémente une barre de navigation dans une application Angular. Il affiche dynamiquement les boutons Connexion et Déconnexion en fonction de l’état d’authentification utilisateur et inclut un bouton Afficher le profil pour les utilisateurs connectés, améliorant l’interface utilisateur de l’application. Les méthodes login() et logout() dans src/app/app.component.ts sont appelées lorsque les boutons sont sélectionnés.

  2. Ouvrez le fichier src/app/app-routing.module.ts et remplacez son contenu par le code suivant.

    // Required for Angular
    import { NgModule } from '@angular/core';
    
    // Required for the Angular routing service
    import { Routes, RouterModule } from '@angular/router';
    
    // Required for the "Profile" page
    import { ProfileComponent } from './profile/profile.component';
    
    // Required for the "Home" page
    import { HomeComponent } from './home/home.component';
    
    // MsalGuard is required to protect routes and require authentication before accessing protected routes
    import { MsalGuard } from '@azure/msal-angular';
    
    // Define the possible routes
    // Specify MsalGuard on routes to be protected
    // '**' denotes a wild card
    const routes: Routes = [
      {
        path: 'profile',
        component: ProfileComponent,
        canActivate: [
          MsalGuard
        ]
      },
      {
        path: '**',
        component: HomeComponent
      }
    ];
    
    // Create an NgModule that contains all the directives for the routes specified above
    @NgModule({
      imports: [RouterModule.forRoot(routes, {
        useHash: true
      })],
      exports: [RouterModule]
    })
    export class AppRoutingModule { }
    

    L’extrait de code configure le routage dans une application Angular en établissant des chemins d’accès aux composants Profil et Accueil. Il utilise MsalGuard pour appliquer l’authentification sur l’itinéraire Profil, tandis que tous les chemins d’accès non correspondants redirigent vers le composant Accueil.

  3. Ouvrez le fichier src/app/home/home.component.ts et remplacez son contenu par le code suivant.

    // Required for Angular
    import { Component, OnInit } from '@angular/core';
    
    // Required for MSAL
    import { MsalBroadcastService, MsalService } from '@azure/msal-angular';
    
    // Required for Angular multi-browser support
    import { EventMessage, EventType, AuthenticationResult } from '@azure/msal-browser';
    
    // Required for RJXS observables
    import { filter } from 'rxjs/operators';
    
    @Component({
      selector: 'app-home',
      templateUrl: './home.component.html'
    })
    export class HomeComponent implements OnInit {
      constructor(
        private authService: MsalService,
        private msalBroadcastService: MsalBroadcastService
      ) { }
    
      // Subscribe to the msalSubject$ observable on the msalBroadcastService
      // This allows the app to consume emitted events from MSAL
      ngOnInit(): void {
        this.msalBroadcastService.msalSubject$
          .pipe(
            filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS),
          )
          .subscribe((result: EventMessage) => {
            const payload = result.payload as AuthenticationResult;
            this.authService.instance.setActiveAccount(payload.account);
          });
      }
    }
    

    Le code configure un composant Angular appelé HomeComponent qui s’intègre à la bibliothèque d’authentification Microsoft (MSAL). Dans le hook de cycle de vie ngOnInit, le composant s’abonne au msalSubject$ observable à partir de MsalBroadcastService, en filtrant les événements de réussite de connexion. Lorsqu’un événement de connexion se produit, il récupère le résultat d’authentification et définit le compte actif dans le MsalService, ce qui permet à l’application de gérer les sessions utilisateur.

  4. Ouvrez le fichier src/app/home/home.component.html et remplacez son contenu par le code suivant.

    <div class="title">
        <h5>
            Welcome to the Microsoft Authentication Library For JavaScript - Angular SPA
        </h5>
        <p >View your data from Microsoft Graph by clicking the "View Profile" link above.</p>
    </div>
    

    Le code accueille les utilisateurs dans l’application et les invite à afficher leurs données Microsoft Graph en cliquant sur le lien Afficher le profil.

  5. Ouvrez le fichier src/main.ts et remplacez son contenu par le code suivant.

    import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';
    
    import { AppModule } from './app/app.module';
    
    platformBrowserDynamic().bootstrapModule(AppModule)
      .catch(err => console.error(err));
    

    L’extrait de code importe platformBrowserDynamic depuis le module dynamique du navigateur de la plateforme Angular et AppModule depuis le fichier module de l’application. Il utilise ensuite platformBrowserDynamic() pour démarrer le AppModule, initialisant l’application Angular. Toutes les erreurs qui se produisent pendant le processus de démarrage sont interceptées et enregistrées dans la console.

  6. Ouvrez le fichier src/index.html et remplacez son contenu par le code suivant.

    <!doctype html>
    <html lang="en">
      <head>
        <meta charset="utf-8">
        <title>MSAL For JavaScript - Angular SPA</title>
      </head>
      <body>
        <app-root></app-root>
        <app-redirect></app-redirect>
      </body>
    </html>
    

    L’extrait de code définit un document HTML5 avec l’anglais comme langue et un codage de caractères UTF-8. Il définit le titre sur « MSAL For JavaScript : Angular SPA ». Le corps inclut le composant <app-root> comme point d’entrée principal et le composant <app-redirect> pour les fonctionnalités de redirection.

  7. Ouvrez le fichier src/styles.css et remplacez son contenu par le code suivant.

    body {
      margin: 0;
      font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
        'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
        sans-serif;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }
    
    code {
      font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
        monospace;
    }
    
    .app {
      text-align: center;
      padding: 8px;
    }
    
    .title{
      text-align: center;
      padding: 18px;
    }
    
    
    .profile{
      text-align: center;
      padding: 18px;
    }
    
    .profileButton{
      display: flex;
      justify-content: center;
      padding: 18px;
    }
    

    Le code CSS met en forme la page web en définissant la police du corps sur une pile sans serif moderne, en supprimant les marges par défaut et en appliquant un lissage de la police pour améliorer la lisibilité. Il centre le texte et ajoute une marge intérieure aux classes .app, .title et .profile, tandis que la classe .profileButton utilise Flexbox pour centrer ses éléments.

Étape suivante