Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
MSAL Angular fornisce MsalGuard, una classe che è possibile usare per proteggere le route e richiedere l'autenticazione prima di accedere alla route protetta. Questo documento fornisce altre informazioni sulla configurazione e sulle considerazioni relative all'uso di MsalGuard.
MsalGuard è una classe di praticità che è possibile usare per migliorare l'esperienza utente, ma non deve essere basata sulla sicurezza. Gli utenti malintenzionati possono potenzialmente aggirare le guardie lato client e assicurarsi che il server non restituisca dati a cui l'utente non deve accedere.
Potrebbe anche essere necessaria una guardia di rotta per soddisfare esigenze specifiche. Ti incoraggiamo a scrivere il tuo guard se MsalGuard non soddisfa tutte queste esigenze.
Configurazioni
Configurazione di MsalGuard in app.module.ts e app-routing.module.ts
Il MsalGuard può essere aggiunto all'applicazione come provider in app.module.ts, insieme alla relativa configurazione. Le istruzioni di importazione includono un'istanza di MSAL, nonché due oggetti di configurazione specifici per Angular. Il secondo argomento è un oggetto MsalGuardConfiguration, che contiene i valori per interactionType, un authRequest facoltativo e un loginFailedRoute facoltativo.
Il MsalGuard viene quindi utilizzato per proteggere le rotte nel file app-routing.module.ts. L'esempio di codice seguente illustra l'aggiunta di MsalGuard alla Profile route. Proteggere la route Profile significa che, anche se un utente non accede tramite il pulsante Login, se prova ad accedere alla route Profile o fa clic sul pulsante Profile, MsalGuard chiederà all'utente di autenticarsi tramite popup o reindirizzamento prima di mostrare la pagina Profile.
La configurazione potrebbe essere simile alla seguente. Consulta la nostra documentazione sulla configurazione per altri modi di configurare MSAL Angular per la tua app e le sezioni seguenti per maggiori dettagli sull'oggetto MsalConfiguration e sulle interfacce di 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 { }
Tipo di interazione
L'impostazione del tipo di interazione determina come MsalGuard richiederà in modo interattivo di accedere. Può InteractionType essere importato da @azure/msal-browser e impostato su Popup o Redirect.
AuthRequest facoltativo
L'opzione facoltativa authRequest è una funzionalità avanzata non necessaria. Tuttavia, consigliamo di impostare authRequest su MsalGuardConfiguration con scopes in modo da ottenere in anticipo il consenso per gli ambiti. Se il consenso per scopes non viene concesso in anticipo, gli ambiti possono essere ottenuti in modo incrementale. Ciò può comportare la presentazione di una finestra di dialogo di consenso all'utente dell'app più volte.
L'autorizzazione preventiva degli ambiti è illustrata negli esempi di codice sopra e nei nostri esempi.
Tutti i possibili parametri per l'oggetto richiesta sono disponibili qui: PopupRequest e RedirectRequest.
Route di accesso non riuscita
La loginFailedRoute stringa può essere impostata su MsalGuardConfiguration.
MsalGuard reindirizzerà a questo percorso se è richiesto l'accesso e questo non riesce.
Consulta l'esempio di Angular per esempi su come implementarlo nel modulo di configurazione e nel modulo di instradamento dell'app.
Si noti che il reindirizzamento in caso di errore non è disponibile per le applicazioni Angular 9 che usano l'interfaccia CanLoad a causa delle differenze tra i tipi di base.
Interfaces
Oltre a canActivate, MsalGuard implementa anche canActivateChild e canLoad, che possono essere aggiunti alle definizioni delle route in app-routing.module.ts. È possibile visualizzare questi elementi usati nell'applicazione di esempio MSAL Angular v2 Angular 11 precedente, oltre a quanto riportato di seguito. Per altre informazioni sulle interfacce, vedere la documentazione di Angular.
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]
},
];
Considerazioni sull'uso di MSAL Guard
Uso di MSAL Guard nella home page
Impostare MsalGuard nella pagina iniziale è la soluzione che consigliamo se vuoi che agli utenti venga chiesto di effettuare l'accesso quando accedono alla tua applicazione. Non è consigliabile chiamare login in ngOnInit in app.component.ts, poiché può causare cicli di reindirizzamento.
Le raccomandazioni aggiuntive dipendono dalla strategia di routing e sono disponibili nelle sezioni seguenti.
Usare MSAL Guard con il routing basato sul percorso
Quando usi PathLocationStrategy e i reindirizzamenti con la tua app Angular, consigliamo di usare una route dedicata per i reindirizzamenti, in modo da evitare cicli di reindirizzamento. Questa route dovrebbe anche essere la tua redirectUri e non dovrebbe essere protetta da MsalGuard.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Dedicated route for redirects
path: 'auth',
component: MsalRedirectComponent
},
{
path: '',
component: HomeComponent
}
];
Per effettuare l'accesso degli utenti quando raggiungono la tua app, se utilizzi PathLocationStrategy, ti consigliamo:
- Impostazione di
MsalGuardnella tua pagina iniziale - Imposta il tuo
redirectUrisu'http://localhost:4200/auth' - Aggiungere un percorso
'auth'alle route, impostandoMsalRedirectComponentcome componente (questo percorso non deve essere protetto daMsalGuard) - Assicurarsi che
MsalRedirectComponentsia stato inizializzato - Facoltativamente: aggiungere
MsalGuarda tutte le route, se si desidera proteggerle tutte
Il nostro esempio Angular Modules usa PathLocationStrategy e dimostra come proteggere le route con MsalGuard.
Uso della MSAL Guard con routing con hash
Quando si usa HashLocationStrategy con l'app Angular, consigliamo vivamente di impostare route segnaposto (ad esempio /code) nel file app-routing.module.ts per evitare che venga attivato il router di Angular quando Microsoft Entra ID restituisce nell'hash la risposta contenente il codice di autorizzazione, poiché in caso contrario potrebbero verificarsi problemi nel completamento dell'autenticazione. Queste route segnaposto non devono essere protette da MsalGuarde non devono puntare a un componente che attiva l'interazione o effettua chiamate API protette al caricamento della pagina.
const routes: Routes = [
{
path: 'profile',
component: ProfileComponent,
canActivate: [MsalGuard]
},
{
// Needed for hash routing
path: 'code',
component: HomeComponent
},
{
path: '',
component: HomeComponent
}
];
Anche redirectUri nella configurazione MSAL deve essere impostato sulla home page.
Per effettuare l'accesso degli utenti quando raggiungono la tua app, se utilizzi HashLocationStrategy, ti consigliamo:
- Impostazione di
MsalGuardnella tua pagina iniziale - Senza impostare il
MsalGuardnelle route segnaposto (ad esempio/code,/error) - Assicurarsi che
MsalRedirectComponentsia stato inizializzato - Facoltativamente: aggiungendo
MsalGuarda tutti gli altri percorsi se si desidera proteggere tutti i percorsi
Vedere l'esempio precedente di MSAL Angular v2 Angular 11, che usa HashLocationStrategy e illustra come proteggere le route con MsalGuard.
Modifiche da msal-angular v1 a msal-angular v2
-
Configurazione:
MsalAngularConfigurationè stata deprecata e non funziona più. La configurazione diMsalGuardviene ora eseguita tramite .MsalGuardConfiguration -
Interfacce:
MsalGuardora implementaCanActivateChildeCanLoadoltre aCanActivate. Per altri dettagli, vedere la sezione precedenteInterfaces. -
Reindirizzamento in caso di errore:
MsalGuardla configurazione include ora un oggettologinFailedRouteche può essere configurato. Per i dettagli, vedere la sezione sopra suloginFailedRoute.