Получить конфигурацию перехватчика MSAL из API

#angular #msal #msal-angular

Вопрос:

Для статического веб-приложения (SPA) я настроил одну конечную точку /api/настройки. Эта конечная точка не требует аутентификации и возвращает список других конечных точек, необходимых приложению. Теперь проблема в том, что эти конечные точки, возвращаемые /api/настройками, требуют аутентификации.

В приведенном ниже коде мне нужно настроить protectedResourceMap с помощью ответа /api/settings. Я пытался создать фабрику для MSAL_INTERCEPTOR_CONFIG поставщика, но я думаю, что это не работает, потому что это приводит к циклической зависимости.

У кого-нибудь есть решение для создания ответа protectedResourceMap из API? Другим назначением было бы вручную добавить токен при запросе конечных точек, но я также не смог найти способ сделать это.

 @NgModule({
  declarations: [
    // ...
  ],
  imports: [
    // ...
    HttpClientModule,
    MsalModule.forRoot(
      new PublicClientApplication({
        auth: {
          clientId: environment.msalClientId,
          authority: environment.msalAuthority,
          redirectUri: '/',
        },
        cache: {
          cacheLocation: 'localStorage',
          storeAuthStateInCookie: isIE, // Set to true for Internet Explorer 11
        },
      }),
      {
        interactionType: InteractionType.Redirect, // MSAL Guard Configuration
        authRequest: {
          scopes: [environment.msalClientId   '/.default'],
        },
      },
      {
        interactionType: InteractionType.Redirect, // MSAL Interceptor Configuration
        protectedResourceMap: new Map<string, string[]>(),
      }
    ),
  ],
  providers: [
    {
      provide: HTTP_INTERCEPTORS,
      useClass: MsalInterceptor,
      multi: true,
    },
    MsalGuard,
  ],
  bootstrap: [AppComponent, MsalRedirectComponent],
})
export class AppModule {}
 

Ответ №1:

Я бы рекомендовал вручную добавлять маркеры аутентификации к API в вашей текущей ситуации. Вы не указали, как вы уведомили свой api/настройки или как вы сохранили ответ в своем коде. Было бы полезно предоставить дополнительные рекомендации, если бы вы могли поделиться ими.