Как мне заставить MsalGuard использовать мой идентификатор клиента?

#angular #msal #msal.js

#angular #azure-ad-msal #msal.js

Вопрос:

Я пытаюсь настроить свое приложение Angular на использование @azure / msal-angular. Я настроил MsalModule следующим образом:

 import { NgModule } from "@angular/core";
import { MsalModule, MsalInterceptor } from "@azure/msal-angular";
import { HTTP_INTERCEPTORS } from "@angular/common/http";

console.log(`window populated: ${(window as any).APP_SETTINGS.aadAppClientId}`);
export const msalModuleForRoot = MsalModule.forRoot({
  clientID: (<any>window).APP_SETTINGS.aadAppClientId,
});

@NgModule({
  imports: [
    msalModuleForRoot,
  ],
  exports: [
    MsalModule
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: MsalInterceptor,
      multi: true
    },
  ],
})
export class AppMsalModule { }
  

Этот модуль импортирован в мое приложение.module.browser.ts. Журнал консоли успешно распечатывает мой идентификатор клиента.

Затем в моем app.routing.ts я добавил MsalGuard на маршруты, требующие авторизации.

Что я вижу: эти маршруты перенаправляются на экран входа в систему, как и ожидалось, но при аутентификации запрашивается разрешение на «myTrialApp», которое не является именем моего приложения.

При более внимательном рассмотрении MsalGuard в отладчике я вижу, что используемый им идентификатор клиента не определен. Я пытаюсь понять, что мне нужно изменить, чтобы убедиться, что на странице входа используется правильный идентификатор клиента.

Ответ №1:

Это не работает из-за AoT. Хорошим обходным путем была бы возможность внедрить MsalConfig, но, похоже, сегодня это не поддерживается в библиотеке. На данный момент я обошел это, определив свой ClientID в environment.ts, который доступен во время компиляции.