Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jak skonfigurować
Domyślnie, gdy MSAL.js musi przechodzić z jednej strony w aplikacji do innej, spowoduje ponowne przypisanie window.location, powodując przekierowanie pełnej ramki do drugiej strony i spowodowanie ponownego renderowania aplikacji. Jeśli używasz routera Angular, może to być nieuniknione, ponieważ router włącza nawigację po stronie klienta i wyświetla lub ukrywa tylko części strony w razie potrzeby.
Obecnie istnieje jeden scenariusz, w którym MSAL.js będzie przechodzić z jednej strony w aplikacji do innej. Jeśli aplikacja wykonuje wszystkie następujące czynności, kontynuuj czytanie:
- Aplikacja używa przepływu przekierowania zamiast przepływu wyskakującego okna do logowania
-
PublicClientApplicationjest konfigurowany przy użyciuauth.navigateToLoginRequestUrl: true(ustawienie domyślne) - Aplikacja zawiera strony, które mogą wywoływać
loginRedirect/acquireTokenRedirectprzy użyciu współdzielonegoredirectUri, tzn. wywołujeszloginRedirectzhttp://localhost/protectedz redirectUri równymhttp://localhost
Jeśli aplikacja wykonuje wszystkie powyższe czynności, możesz zastąpić metodę MSAL używaną do nawigowania, importując metodę MsalCustomNavigationClient i wywołując metodę setNavigationClient.
UWAGA: Ze względu na poprawkę zabezpieczeń usługa MsalCustomNavigationClient Angular nie będzie używać platformy Angular Router do nawigowania po stronie klienta, gdy navigateToLoginRequestUrl jest ustawiona na wartość true i obsługuje przekierowania. Jest to znany problem, który zostanie rozwiązany w przyszłej wersji.
Przykładowa implementacja
W poniższym przykładzie pokazano, jak zaimplementować to podczas korzystania z platformy Angular Router. Więcej informacji na temat routera angular można znaleźć tutaj i można znaleźć pełną przykładową aplikację, która implementuje tę funkcję dla platformy Angular tutaj.
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
}
}