Wielu Najemców

Domyślnie aplikacja obsługuje wiele dzierżaw, ponieważ biblioteka MSAL ustawia dzierżawę w parametrze authority na „common”, jeśli nie określono jej w konfiguracji. Dzięki temu dowolne konto Microsoft może uwierzytelnić się w aplikacji. Jeśli nie interesuje Cię obsługa wielu dzierżaw, podczas tworzenia wystąpienia biblioteki MSAL w app.module.ts, jak pokazano poniżej, musisz ustawić właściwość konfiguracyjną authority.

@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 {}

Jeśli zezwalasz na uwierzytelnianie wielodostępowe i nie chcesz zezwalać wszystkim użytkownikom kont Microsoft na korzystanie z aplikacji, musisz zapewnić własną metodę filtrowania wystawców tokenów wyłącznie do tych dzierżawców, którym wolno się zalogować.

Zmiana dzierżawy

Tenant można również ustawić dynamicznie, tworząc nową instancję MSAL w odpowiednim komponencie, jak pokazano poniżej.

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'
      }
    });
  }

Żądanie uwierzytelniania dynamicznego

Domyślnie msalGuard i MsalInterceptor używają właściwości statycznych ustawionych w konfiguracji. Oba te elementy można również skonfigurować za pomocą metody authRequest, umożliwiając dynamiczne zmianę parametrów używanych do uwierzytelniania.

MsalInterceptor — dynamiczne żądanie uwierzytelniania (tokeny wielodostępne)

Jeśli jako dzierżawa zostanie użyte organizations lub common, wszystkie tokeny zostaną zażądane dla dzierżawy macierzystej użytkowników. Jednak może to nie być pożądany wynik. Jeśli użytkownik zostanie zaproszony jako gość, tokeny mogą pochodzić z niewłaściwego urzędu.

Ustawienie elementu authRequest w obiekcie MsalInterceptorConfig jako metody umożliwia dynamiczną zmianę żądania uwierzytelnienia. Na przykład podczas korzystania z użytkowników gościnnych można ustawić urząd uwierzytelniania na podstawie macierzystej dzierżawy konta. Właściwości w elemencie authRequest mogą zostać zmienione, ale zawsze powinny rozszerzać originalAuthRequest, jak poniżej:

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
    }
  ]
});