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.
Prima di utilizzare @azure/msal-angular, registri un'applicazione in Microsoft Entra ID per ottenere clientId.
Includere e inizializzare il modulo MSAL nel modulo dell'app
Importa MsalModule in app.module.ts. Per inizializzare il modulo MSAL, fornire il clientId dell'applicazione, che si ottiene dalla registrazione dell'applicazione.
import { NgModule } from '@angular/core';
import { HTTP_INTERCEPTORS, HttpClientModule } from '@angular/common/http';
import { AppComponent } from './app.component';
import { MsalModule, MsalService, MsalGuard, MsalInterceptor, MsalBroadcastService, MsalRedirectComponent } from "@azure/msal-angular";
import { PublicClientApplication, InteractionType, BrowserCacheLocation } from "@azure/msal-browser";
@NgModule({
imports: [
MsalModule.forRoot( new PublicClientApplication({ // MSAL Configuration
auth: {
clientId: "Your client ID",
authority: "Your authority",
redirectUri: "Your redirect Uri",
},
cache: {
cacheLocation : BrowserCacheLocation.LocalStorage,
},
system: {
loggerOptions: {
loggerCallback: () => {},
piiLoggingEnabled: false
}
}
}), {
interactionType: InteractionType.Redirect, // MSAL Guard Configuration
}, {
interactionType: InteractionType.Redirect, // MSAL Interceptor Configuration
})
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
},
MsalService,
MsalGuard,
MsalBroadcastService
],
bootstrap: [AppComponent, MsalRedirectComponent]
})
export class AppModule {}
Proteggi le rotte della tua applicazione
Aggiungi l'autenticazione per proteggere route specifiche nella tua applicazione aggiungendo canActivate: [MsalGuard] alla definizione della route. Aggiungerlo alle route padre o figlio. Quando un utente visita queste route, la libreria richiede all'utente di eseguire l'autenticazione.
Per altre informazioni, vedere la MsalGuard documentazione sulla configurazione e sulle considerazioni, tra cui l'uso di interfacce aggiuntive.
Di seguito è riportato un esempio di route definita con :MsalGuard
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 { }
Ottenere i token per le chiamate API Web
@azure/msal-angular consente di aggiungere un intercettore Http (MsalInterceptor) nell'oggetto app.module.ts come indicato di seguito. Il MsalInterceptor otterrà i token e li aggiungerà a tutte le richieste HTTP per le chiamate API in base a protectedResourceMap. Per altre informazioni sulla configurazione e sull'uso, vedere la documentazione di MsalInterceptor .
import { NgModule } from '@angular/core';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { AppComponent } from './app.component';
import { MsalModule, MsalService, MsalGuard, MsalInterceptor, MsalBroadcastService, MsalRedirectComponent } from "@azure/msal-angular";
import { PublicClientApplication, InteractionType, BrowserCacheLocation } from "@azure/msal-browser";
@NgModule({
imports: [
MsalModule.forRoot( new PublicClientApplication({ // MSAL Configuration
auth: {
clientId: "Your client ID",
authority: "Your authority",
redirectUri: "Your redirect Uri",
},
cache: {
cacheLocation : BrowserCacheLocation.LocalStorage,
},
system: {
loggerOptions: {
loggerCallback: () => {},
piiLoggingEnabled: false
}
}
}), {
interactionType: InteractionType.Redirect, // MSAL Guard Configuration
}, {
interactionType: InteractionType.Redirect, // MSAL Interceptor Configuration
protectedResourceMap: new Map([
['https://graph.microsoft.com/v1.0/me', ['user.read']],
['https://api.myapplication.com/users/*', ['customscope.read']],
['http://localhost:4200/about/', null]
])
})
],
providers: [
{
provide: HTTP_INTERCEPTORS,
useClass: MsalInterceptor,
multi: true
},
MsalService,
MsalGuard,
MsalBroadcastService
],
bootstrap: [AppComponent, MsalRedirectComponent]
})
export class AppModule {}
L'uso di MsalInterceptor è facoltativo. È possibile ottenere in modo esplicito i token usando le API acquireToken.
Si noti che MsalInterceptor è fornito per comodità e potrebbe non essere adatto a tutti i casi d'uso. Scrivere un intercettore personalizzato se si hanno esigenze specifiche che non vengono gestite da MsalInterceptor.
Sottoscrivere eventi
MSAL fornisce un sistema eventi che genera eventi correlati all'autenticazione e a MSAL. Per usare gli eventi, aggiungi MsalBroadcastService al costruttore del componente o del servizio.
1. Come sottoscrivere gli eventi
import { EventMessage, EventType } from '@azure/msal-browser';
import { filter } from 'rxjs/operators';
this.msalBroadcastService.msalSubject$
.pipe(
filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS)
)
.subscribe((result) => {
// do something here
});
2. Eventi disponibili
Trova l'elenco degli eventi disponibili per MSAL nella documentazione relativa agli @azure/msal-browsereventi.
3. Annullamento della sottoscrizione
L'annullamento della sottoscrizione è importante. Implementare ngOnDestroy() nel componente per annullare la sottoscrizione.
import { EventMessage, EventType } from '@azure/msal-browser';
import { filter, Subject, takeUntil } from 'rxjs';
private readonly _destroying$ = new Subject<void>();
this.msalBroadcastService.msalSubject$
.pipe(
filter((msg: EventMessage) => msg.eventType === EventType.LOGIN_SUCCESS),
takeUntil(this._destroying$)
)
.subscribe((result) => {
this.checkAccount();
});
ngOnDestroy(): void {
this._destroying$.next(null);
this._destroying$.complete();
}
Passaggi successivi
È possibile usare @azure/msal-angularle API pubbliche.