Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
По умолчанию, когда MSAL.js требуется перейти с одной страницы вашего приложения на другую, она переназначает window.location, что приводит к полному перенаправлению фрейма на другую страницу и повторной отрисовке вашего приложения. Если вы используете маршрутизатор Angular, это может быть нежелательным, так как маршрутизатор поддерживает навигацию на стороне клиента и отображает или скрывает только необходимые части страницы.
В настоящее время существует один сценарий, в котором MSAL.js будет переходить с одной страницы в приложении на другую. Если приложение выполняет все следующие действия, продолжайте чтение:
- Приложение использует поток перенаправления вместо всплывающего потока для входа.
-
PublicClientApplicationнастроен с помощьюauth.navigateToLoginRequestUrl: true(по умолчанию) - В вашем приложении есть страницы, которые могут вызывать
loginRedirect/acquireTokenRedirectс общимredirectUri, т. е. вы вызываетеloginRedirectизhttp://localhost/protectedс redirectUri, равнымhttp://localhost
Если ваше приложение выполняет все описанные выше действия, вы можете переопределить метод навигации, используемый MSAL, импортировав MsalCustomNavigationClient и вызвав setNavigationClient.
ПРИМЕЧАНИЕ: Из-за исправления безопасности MsalCustomNavigationClient не будет использовать Angular Router для навигации на стороне клиента, если для navigateToLoginRequestUrl установлено значение true и выполняется обработка перенаправлений. Это известная проблема, которая будет устранена в будущем выпуске.
Пример реализации
В приведенном ниже примере показано, как реализовать это при использовании Angular Router. Дополнительные сведения об маршрутизаторе Angular можно найти здесь, и вы можете найти полный пример приложения, реализующего это для Angular здесь.
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
}
}