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.
MSAL Angular bietet MsalGuardeine Klasse, mit der Sie Routen schützen und eine Authentifizierung erfordern können, bevor Sie auf die geschützte Route zugreifen. Dieses Dokument enthält weitere Informationen zur Konfiguration sowie zu Aspekten bei der Verwendung des MsalGuard.
MsalGuard ist eine Komfortklasse, die Sie verwenden können, um die Benutzererfahrung zu verbessern, aber sie sollte nicht für die Sicherheit verwendet werden. Angreifer können potenziell clientseitige Schutzvorrichtungen umgehen, und Sie sollten sicherstellen, dass der Server keine Daten zurückgibt, auf die der Benutzer nicht zugreifen sollte.
Möglicherweise benötigen Sie auch einen Routenschutz, der bestimmte Anforderungen erfüllt. Wir empfehlen Ihnen, einen eigenen Guard zu schreiben, wenn MsalGuard nicht all diese Anforderungen erfüllt.
Konfigurationen
Konfiguration von MsalGuard in app.module.ts und app-routing.module.ts
Die MsalGuard kann Ihrer Anwendung in der app.module.ts als Provider zusammen mit ihrer Konfiguration hinzugefügt werden. Die Importe übernehmen eine Instanz von MSAL sowie zwei Angular-spezifische Konfigurationsobjekte. Das zweite Argument ist ein MsalGuardConfiguration Objekt, das die Werte für interactionType, ein optionales authRequestund ein optionales loginFailedRouteenthalten.
Das MsalGuard wird dann verwendet, um Routen im app-routing.module.ts zu schützen. Das folgende Codebeispiel demonstriert, wie das MsalGuard zur Route Profile hinzugefügt wird. Der Schutz der Profile Route bedeutet, dass auch wenn sich ein Benutzer nicht mit der Login Schaltfläche anmeldet, wenn er versucht, auf die Profile Route zuzugreifen oder auf die Profile Schaltfläche zu klicken, der MsalGuard Benutzer auffordert, sich per Popup oder Umleitung zu authentifizieren, bevor die Profile Seite angezeigt wird.
Ihre Konfiguration sieht möglicherweise wie unten aus. In unserem Konfigurationsdokument finden Sie weitere Möglichkeiten zum Konfigurieren von MSAL Angular für Ihre App, und in den folgenden Abschnitten finden Sie weitere Details zum Objekt und zu den Schnittstellen für das MsalConfiguration Routing.
// app.module.ts
import { NgModule } from '@angular/core';
import { HTTP_INTERCEPTORS, HttpClientModule } from "@angular/common/http";
import { MsalModule, MsalRedirectComponent, MsalGuard } from '@azure/msal-angular'; // Import MsalInterceptor
import { InteractionType, PublicClientApplication } from '@azure/msal-browser';
import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
@NgModule({
declarations: [
AppComponent,
],
imports: [
MsalModule.forRoot( new PublicClientApplication({
// MSAL Configuration
}), {
// MSAL Guard Configuration
interactionType: InteractionType.Redirect,
authRequest: {
scopes: ['user.read']
},
loginFailedRoute: '/login-failed'
}, {
// MSAL Interceptor Configurations
}),
AppRoutingModule
],
providers: [
// ...
MsalGuard
],
bootstrap: [AppComponent, MsalRedirectComponent]
})
export class AppModule { }
// app-routing.module.ts
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { HomeComponent } from './home/home.component';
import { ProfileComponent } from './profile/profile.component';
import { MsalGuard } from '@azure/msal-angular';
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
path: '',
component: HomeComponent
},
];
@NgModule({
imports: [RouterModule.forRoot(routes)],
exports: [RouterModule]
})
export class AppRoutingModule { }
Interaktionstyp
Das Festlegen des Interaktionstyps bestimmt, wie MsalGuard interaktiv zur Anmeldung auffordert. Die InteractionType Kann aus @azure/msal-browser importiert und auf Popup oder Redirectfestgelegt werden.
Optionaler Authentifizierungsanforderung
Das optionale authRequest ist eine erweiterte Funktion, die nicht erforderlich ist. Wir empfehlen jedoch, authRequest auf dem MsalGuardConfiguration mit scopes festzulegen, damit die Einwilligung für die Berechtigungsumfänge vorab eingeholt werden kann. Wenn die Zustimmung zu scopes nicht im Voraus erteilt wird, können Berechtigungsbereiche schrittweise angefordert werden. Dies kann dazu führen, dass ihrem App-Benutzer mehrmals ein Zustimmungsdialog angezeigt wird.
Die Zustimmung zu Scopes vorab wird in den obigen Codebeispielen und in unseren Beispielen gezeigt.
Alle möglichen Parameter für das Anforderungsobjekt finden Sie hier: PopupRequest und RedirectRequest.
Anmeldung fehlgeschlagene Route
Die loginFailedRoute Zeichenfolge kann auf MsalGuardConfiguration gesetzt werden. Die MsalGuard Umleitung erfolgt auf diese Route, wenn die Anmeldung erforderlich ist und fehlschlägt.
Im Angular-Beispiel finden Sie Beispiele für die Implementierung im Konfigurations - und App-Routingmodul.
Beachten Sie, dass die Umleitung bei Fehlern für Angular 9-Anwendungen, die die CanLoad Schnittstelle aufgrund von Basistypunterschieden verwenden, nicht verfügbar ist.
Interfaces
Zusätzlich zu canActivate, MsalGuard implementiert canActivateChild und canLoad, und diese können ihren Routendefinitionen in app-routing.module.ts hinzugefügt werden. Sie können diese in unserer älteren MSAL Angular v2 Angular 11-Beispielanwendung sowie unten sehen. Weitere Informationen zu Schnittstellen finden Sie in den Angular-Dokumenten.
const routes: Routes = [
{
path: 'profile',
canActivateChild: [MsalGuard],
children: [
{
path: '',
component: ProfileComponent
},
{
path: 'detail',
component: DetailComponent
}
]
},
{
path: 'lazyLoad',
loadChildren: () => import('./lazy/lazy.module').then(m => m.LazyModule),
canLoad: [MsalGuard]
},
];
Überlegungen bei der Verwendung von MSAL Guard
Verwenden von MSAL Guard auf der Startseite
Wir empfehlen, MsalGuard auf der ersten Seite festzulegen, wenn Benutzer beim Aufrufen Ihrer Anwendung zur Anmeldung aufgefordert werden sollen. Wir empfehlen nicht, login in ngOnInit in app.component.ts aufzurufen, da dies zu Schleifen bei Weiterleitungen führen kann.
Unsere zusätzlichen Empfehlungen hängen von Ihrer Routingstrategie ab und finden Sie in den folgenden Abschnitten.
Verwenden von MSAL Guard mit Pfadrouting
Wenn Sie PathLocationStrategy und Weiterleitungen mit Ihrer Angular-App verwenden, empfehlen wir eine dedizierte Route für Weiterleitungen, um Endlosschleifen zu vermeiden. Diese Route sollte auch dein redirectUri sein und sollte nicht von der MsalGuard geschützt werden.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Dedicated route for redirects
path: 'auth',
component: MsalRedirectComponent
},
{
path: '',
component: HomeComponent
}
];
Um Benutzer bei Erreichen Ihrer App anzumelden, wenn Sie PathLocationStrategy verwenden, empfehlen wir Folgendes:
- Festlegen von
MsalGuardauf Ihrer Startseite - Stellen Sie Ihre
redirectUriauf'http://localhost:4200/auth'ein - Einen
'auth'-Pfad zu Ihren Routen hinzufügen undMsalRedirectComponentals Komponente festlegen (diese Route sollte nicht durchMsalGuardgeschützt werden) - Sicherstellen, dass
MsalRedirectComponentinitialisiert ist - Optional: Hinzufügen
MsalGuardzu allen Routen, wenn alle Ihre Routen geschützt werden sollen
Unser Beispiel zu Angular Modules verwendet die PathLocationStrategy und veranschaulicht, wie man Routen mit der MsalGuard schützt.
Verwenden von MSAL Guard mit Hashrouting
Wenn Sie HashLocationStrategy mit Ihrer Angular-App verwenden, empfehlen wir dringend, in Ihrer app-routing.module.ts Platzhalterrouten (wie /code) einzurichten, um zu verhindern, dass der Angular-Router ausgelöst wird, wenn Microsoft Entra ID die Antwort mit dem Authentifizierungscode im Hash zurückgibt, da es andernfalls zu Problemen beim Abschließen der Authentifizierung kommen kann. Diese Platzhalterrouten sollten nicht durch die MsalGuardKomponente geschützt werden und dürfen nicht auf eine Komponente verweisen, die Interaktion auslöst oder geschützte API-Aufrufe beim Laden der Seite auslöst.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Needed for hash routing
path: 'code',
component: HomeComponent
},
{
path: '',
component: HomeComponent
}
];
Die redirectUri in der MSAL-Konfiguration sollte ebenfalls auf die Startseite gesetzt werden.
Um Benutzer beim Aufrufen Ihrer App anzumelden, wenn Sie HashLocationStrategy verwenden, empfehlen wir Folgendes:
- Festlegen von
MsalGuardauf Ihrer ersten Seite -
MsalGuardauf Platzhalterrouten nicht festlegen (z. B./code,/error) - Sicherstellen, dass
MsalRedirectComponentinitialisiert ist - Optional: Fügen Sie
MsalGuardzu all Ihren übrigen Routen hinzu, wenn Sie möchten, dass alle Ihre Routen geschützt sind.
Sehen Sie sich unser älteres MSAL Angular v2 Angular 11-Beispiel an, das HashLocationStrategy verwendet und zeigt, wie Routen mit MsalGuard geschützt werden.
Änderungen von msal-angular v1 zu v2
-
Konfiguration:
MsalAngularConfigurationist veraltet und funktioniert nicht mehr. Die Konfiguration desMsalGuarderfolgt jetzt über dasMsalGuardConfiguration. -
Schnittstellen:
MsalGuardimplementiertCanActivateChildundCanLoadzusätzlich zuCanActivate. Weitere Informationen finden Sie im obigenInterfacesAbschnitt. -
Umleitung bei Fehlern: Die
MsalGuard-Konfiguration verfügt jetzt über ein konfigurierbaresloginFailedRoute. Weitere Einzelheiten finden Sie im obigen Abschnitt zumloginFailedRoute.