Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für: Mitarbeitermandanten
Externe Mandanten (weitere Informationen)
Dieses Lernprogramm ist Teil 2 einer Reihe, die das Erstellen einer Einzelseitenanwendung (Single Page Application, SPA) von Angular veranschaulicht und die Authentifizierung mithilfe der Microsoft Identity Platform hinzufügt. In Teil 1 dieser Reihe haben Sie einen Angular SPA erstellt und erste Konfigurationen hinzugefügt.
In diesem Tutorial führen Sie Folgendes durch:
- An- und Abmeldung hinzufügen
Voraussetzungen
- Abschluss der Voraussetzungen und Schritte im Lernprogramm: Erstellen einer Angular-Einzelseitenanwendung
Hinzufügen von Anmelde- und Abmeldefunktionen zu Ihrer App
In diesem Abschnitt fügen Sie Komponenten hinzu, um die Anmelde- und Abmeldefunktionalität in Ihrer Angular-Anwendung zu unterstützen. Mit diesen Komponenten können Benutzer ihre Sitzungen authentifizieren und verwalten. Sie fügen der Anwendung Das Routing hinzu, um Benutzer basierend auf ihrem Authentifizierungsstatus zu den entsprechenden Komponenten zu leiten.
Führen Sie die folgenden Schritte aus, um die Anmelde- und Abmeldefunktion in Ihrer Angular-Anwendung zu aktivieren:
Öffnen Sie die Datei
src/app/app.component.html
, und ersetzen Sie den Inhalt durch den folgenden Code.<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>
Der Code implementiert eine Navigationsleiste in einer Angular-App. Es zeigt dynamisch die Schaltflächen Anmelden und Abmelden basierend auf dem Benutzerauthentifizierungsstatus an und enthält eine Schaltfläche Profil anzeigen für angemeldete Benutzer, wodurch die Benutzeroberfläche der Anwendung verbessert wird. Die Methoden
login()
undlogout()
insrc/app/app.component.ts
werden aufgerufen, wenn die Schaltflächen ausgewählt werden.Öffnen Sie die Datei
src/app/app-routing.module.ts
, und ersetzen Sie den Inhalt durch den folgenden Code.// 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 { }
Der Codeausschnitt konfiguriert das Routing in einer Angular-Anwendung durch Einrichten von Pfaden für die Komponenten Profil und Startseite. Er verwendet
MsalGuard
, um die Authentifizierung für die Profil-Route zu erzwingen, während alle nicht übereinstimmenden Pfade zur Komponente Startseite umgeleitet werden.Öffnen Sie die Datei
src/app/home/home.component.ts
, und ersetzen Sie den Inhalt durch den folgenden Code.// 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); }); } }
Der Code richtet eine Angular-Komponente namens
HomeComponent
ein, die in die Microsoft Authentication Library (MSAL) integriert wird. ImngOnInit
-Lebenszyklushook abonniert die Komponente das Observable-ElementmsalSubject$
vonMsalBroadcastService
und filtert nach erfolgreichen Anmeldeereignissen. Wenn ein Anmeldeereignis auftritt, ruft er das Authentifizierungsergebnis ab und legt das aktive Konto imMsalService
fest, sodass die Anwendung Benutzersitzungen verwalten kann.Öffnen Sie die Datei
src/app/home/home.component.html
, und ersetzen Sie den Inhalt durch den folgenden Code.<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>
Der Code begrüßt Benutzer in der App und fordert sie auf, ihre Microsoft Graph-Daten anzuzeigen, indem Sie auf den Link Profil anzeigen klicken.
Öffnen Sie die Datei
src/main.ts
, und ersetzen Sie den Inhalt durch den folgenden Code.import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; import { AppModule } from './app/app.module'; platformBrowserDynamic().bootstrapModule(AppModule) .catch(err => console.error(err));
Der Codeausschnitt importiert
platformBrowserDynamic
aus dem dynamischen Angular-Plattformbrowsermodul undAppModule
aus der Moduldatei der Anwendung. Anschließend wirdplatformBrowserDynamic()
verwendet, um dasAppModule
zu bootstrapen und die Angular-Anwendung zu initialisieren. Alle Fehler, die während des Bootstrap-Prozesses auftreten, werden abgefangen und in der Konsole protokolliert.Öffnen Sie die Datei
src/index.html
, und ersetzen Sie den Inhalt durch den folgenden Code.<!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>
Der Codeausschnitt definiert ein HTML5-Dokument mit Englisch als Sprache und UTF-8-Zeichencodierung. Er setzt den Titel auf "MSAL For JavaScript - Angular SPA." Der Hauptteil enthält die
<app-root>
Komponente als Haupteinstiegspunkt und die<app-redirect>
Komponente für Umleitungsfunktionen.Öffnen Sie die Datei
src/styles.css
, und ersetzen Sie den Inhalt durch den folgenden Code.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; }
Der CSS-Code formatiert die Webseite durch Festlegen der Textkörperschriftart auf einen modernen sans-serif-Stapel, Entfernen von Standardrändern und Anwenden der Schriftglättung zur verbesserten Lesbarkeit. Er zentriert Text und fügt Abstand zu den Klassen
.app
,.title
und.profile
hinzu, während die Klasse.profileButton
Flexbox verwendet, um die Elemente zu zentrieren.