Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Прежде чем использовать @azure/msal-angular, зарегистрируйте приложение в Microsoft Entra ID, чтобы получить clientId.
Включение и инициализация модуля MSAL в модуле приложения
Импортируйте MsalModule в app.module.ts. Чтобы инициализировать модуль MSAL, передайте идентификатор клиента приложения, который вы получаете из регистрации приложения.
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 {}
Защита маршрутов в приложении
Добавьте проверку подлинности для защиты определенных маршрутов в приложении, добавив canActivate: [MsalGuard] его в определение маршрута. Добавьте его в родительские или дочерние маршруты. Когда пользователь посещает эти маршруты, библиотека предложит пользователю пройти проверку подлинности.
Дополнительные сведения см. в документацииMsalGuard по настройке и рекомендациям, включая использование дополнительных интерфейсов.
Ниже приведен пример маршрута, определенного с помощью 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 { }
Получение токенов для вызовов веб-API
@azure/msal-angular позволяет добавить перехватчик HTTP (MsalInterceptor) в app.module.ts следующим образом.
MsalInterceptor будет получать токены и добавлять их ко всем вашим HTTP-запросам при вызовах API на основе protectedResourceMap. Дополнительные сведения о конфигурации и использовании см. в нашем документе 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 {}
Использование MsalInterceptor необязательно. Возможно, потребуется явно получить токены с помощью API acquireToken.
Обратите внимание, что MsalInterceptor предоставляется для удобства и может не соответствовать всем вариантам использования. Напишите собственный перехватчик, если у вас есть особые требования, которые не покрываются MsalInterceptor.
Оформление подписки на события
MSAL предоставляет систему событий, которая генерирует события, связанные с аутентификацией и MSAL. Чтобы использовать события, добавьте MsalBroadcastService в конструктор вашего компонента или службы.
1. Как подписаться на события
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. Доступные события
Найдите список событий, доступных в MSAL, в @azure/msal-browserдокументации по событиям.
3. Отмена подписки
Отмена подписки важна. Реализуйте ngOnDestroy() в своем компоненте, чтобы отменить подписку.
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();
}
Дальнейшие действия
Вы готовы использовать @azure/msal-angularобщедоступные API.