Multitenant

Som standard har din applikation stöd för flera klientorganisationer, eftersom MSAL anger klientorganisationen i auktoriteten till "common" om ingen klientorganisation anges i konfigurationen. Detta gör att alla Microsoft-konton kan autentisera sig mot din applikation. Om du inte är intresserad av flerklientbeteende måste du ange konfigurationsegenskapen authority när du instansierar MSAL i app.module.ts, som visas nedan.

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

Om du tillåter autentisering med flera klientorganisationer och inte vill tillåta att alla Microsoft-konto användare använder ditt program, måste du ange en egen metod för att filtrera token utfärdare till endast de klienter som har behörighet att logga in.

Ändra klientorganisationen

Tenanten kan också anges dynamiskt genom att skapa en ny instans av MSAL i den aktuella komponenten, som visas nedan.

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

Begäran om dynamisk autentisering

Som standard använder MsalGuard och MsalInterceptor de statiska egenskaper som anges i konfigurationen. Båda kan också konfigureras med en metod för authRequest, vilket gör att parametrarna som används för autentisering kan ändras dynamiskt.

MsalInterceptor – begäran om dynamisk autentisering (token för flera klientorganisationer)

Om organizations eller common används som klientorganisation kommer alla token att begäras för användarnas hemklientorganisation. Detta kanske dock inte är det önskade resultatet. Om en användare bjuds in som gäst kan token komma från fel utfärdare.

Att ange authRequest i MsalInterceptorConfig till en metod gör att du dynamiskt kan ändra autentiseringsbegäran. Du kan till exempel ange auktoriteten baserat på hemtenanten för kontot när du använder gästanvändare. Egenskaper på authRequest kan ändras, men bör alltid ärva från originalAuthRequest som nedan:

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