Мультитенантная

По умолчанию для вашего приложения поддерживается мультитенантность, поскольку MSAL устанавливает для authority значение tenant "common", если оно не указано в конфигурации. Это позволяет любой учетной записи Microsoft проходить аутентификацию в вашем приложении. Если вы не заинтересованы в работе с несколькими клиентами, необходимо задать authority свойство конфигурации при создании экземпляра MSAL в приведенном app.module.ts ниже примере.

@NgModule({
  imports: [
    MsalModule.forRoot({ // MSAL Configuration
      auth: {
        clientId: 'CLIENT_ID_HERE',
        authority: 'https://login.microsoftonline.com/TENANT_ID_HERE',
        redirectUri: 'http://localhost:4200',
        postLogoutRedirectUri: 'http://localhost:4200'
      },
      // Additional configuration here
    });
  ]
})
export class AppModule {}

Если вы разрешаете многоарендную аутентификацию и не хотите, чтобы все пользователи учетных записей Microsoft могли использовать ваше приложение, необходимо предусмотреть собственный способ фильтрации издателей токенов, чтобы разрешать вход только арендаторам, которым это разрешено.

Изменение клиента

Клиент также можно настроить динамически, создав экземпляр MSAL в соответствующем компоненте, как показано ниже.

import { PublicClientApplication } from '@azure/msal-browser';
import { MsalService } from '@azure/msal-angular';

@Component({})
export class AppComponent implements OnInit {
  constructor(
    private authService: MsalService
  ) {}

  ngOnInit(): void {
    this.authService.instance = new PublicClientApplication({
      auth: {
        clientId: 'CLIENT_ID_HERE',
        authority: 'https://login.microsoftonline.com/TENANT_ID_HERE',
        redirectUri: 'http://localhost:4200',
        postLogoutRedirectUri: 'http://localhost:4200'
      }
    });
  }

Динамический запрос проверки подлинности

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

MsalInterceptor — динамический запрос аутентификации (мультитенантные токены)

Если organizations или common используются в качестве арендатора, все токены будут запрашиваться для домашнего арендатора пользователей. Однако это может быть не нужный результат. Если пользователь приглашён в качестве гостя, токены могут быть выданы не тем центром авторизации.

Установка authRequest в MsalInterceptorConfig на метод позволяет динамически изменять запрос аутентификации. Например, при использовании гостевых пользователей вы можете указать центр аутентификации на основе домашнего тенанта учетной записи. Свойства у authRequest можно изменять, но они всегда должны наследовать originalAuthRequest, как показано ниже:

export function MSALInterceptorConfigFactory(): MsalInterceptorConfiguration {
  const protectedResourceMap = new Map<string, Array<string>>();
  protectedResourceMap.set("https://graph.microsoft.com/v1.0/me", ["user.read"]);
  
  return {
    interactionType: InteractionType.Popup,
    protectedResourceMap,
    authRequest: (msalService, httpReq, originalAuthRequest) => {
      return {
        ...originalAuthRequest,
        authority: `https://login.microsoftonline.com/${originalAuthRequest.account?.tenantId ?? 'organizations'}`
      };
    }
  };
}
...

@NgModule({
  declarations: [...],
  imports: [...],
  providers: [
    ...
    {
      provide: MSAL_INTERCEPTOR_CONFIG,
      useFactory: MSALInterceptorConfigFactory
    }
  ]
});