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.
Come configurare
Per impostazione predefinita, quando MSAL.js deve passare da una pagina dell'applicazione a un'altra, riassegna window.location, provocando un reindirizzamento dell'intero frame all'altra pagina e causando il nuovo rendering dell'applicazione. Se si usa il router Angular, questo può essere indesiderato perché il router abilita lo spostamento sul lato client e mostra o nasconde solo le parti della pagina in base alle esigenze.
Attualmente esiste uno scenario in cui MSAL.js passerà da una pagina dell'applicazione a un'altra. Se l'applicazione esegue tutte le operazioni seguenti, continuare a leggere:
- L'applicazione usa il flusso di reindirizzamento, invece del flusso popup, per accedere
-
PublicClientApplicationè configurato conauth.navigateToLoginRequestUrl: true(impostazione predefinita) - L'applicazione ha pagine che possono chiamare
loginRedirect/acquireTokenRedirectcon un oggetto condivisoredirectUri, ad esempio si chiamaloginRedirectdahttp://localhost/protectedcon un redirectUri dihttp://localhost
Se l'applicazione esegue tutte le operazioni precedenti, è possibile eseguire l'override del metodo usato da MSAL per spostarsi importando MsalCustomNavigationClient e chiamando setNavigationClient.
NOTA: a causa di una correzione di sicurezza, l'oggetto MsalCustomNavigationClient non usa Angular Router per spostarsi sul lato client quando navigateToLoginRequestUrl è impostato su true e gestisce i reindirizzamenti. Si tratta di un problema noto che verrà risolto in una versione futura.
Implementazione di esempio
L'esempio seguente illustra come implementare questa operazione quando si usa Angular Router. Altre informazioni sul router Angular sono disponibili qui ed è possibile trovare un'app di esempio completa che implementa questa opzione per Angular qui.
import { Component, OnInit, Inject } from '@angular/core';
import { Router } from '@angular/router';
import { Location } from '@angular/common';
import { MsalService, MsalBroadcastService, MSAL_GUARD_CONFIG, MsalGuardConfiguration, MsalCustomNavigationClient } from '@azure/msal-angular';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements OnInit, OnDestroy {
constructor(
@Inject(MSAL_GUARD_CONFIG) private msalGuardConfig: MsalGuardConfiguration,
private authService: MsalService,
private msalBroadcastService: MsalBroadcastService,
private router: Router,
private location: Location
) {
const customNavigationClient = new MsalCustomNavigationClient(this.authService, this.router, this.location);
this.authService.instance.setNavigationClient(customNavigationClient);
}
ngOnInit(): void {
// Additional code
}
}