Multiempresa

De forma predeterminada, su aplicación admite varios inquilinos, ya que MSAL establece el inquilino de la autoridad en "common" si no se especifica en la configuración. Esto permite que cualquier cuenta de Microsoft pueda autenticarse en su aplicación. Si no te interesa el comportamiento multitenant, tendrás que establecer la propiedad de configuración authority al instanciar MSAL en el app.module.ts, tal y como se muestra a continuación.

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

Si permite la autenticación multiinquilino y no desea permitir que todos los usuarios de cuenta Microsoft usen la aplicación, debe proporcionar su propio método para filtrar los emisores de tokens solo a los inquilinos que tienen permiso para iniciar sesión.

Cambio del inquilino

El inquilino también se puede establecer dinámicamente instanciando una nueva instancia de MSAL en el componente correspondiente, tal y como se muestra a continuación.

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

Solicitud de autenticación dinámica

De forma predeterminada, MsalGuard y MsalInterceptor usan las propiedades estáticas establecidas en la configuración. Ambos también se pueden configurar con un método para , authRequestlo que permite cambiar dinámicamente los parámetros usados para la autenticación.

MsalInterceptor - solicitud dinámica de autenticación (tokens para varios inquilinos)

Si se utiliza organizations o common como inquilino, todos los tokens se solicitarán para el inquilino de origen de los usuarios. Sin embargo, esto puede no ser el resultado deseado. Si se invita a un usuario como invitado, es posible que los tokens procedan de una autoridad incorrecta.

Configurar el authRequest de MsalInterceptorConfig como un método permite cambiar dinámicamente la solicitud de autenticación. Por ejemplo, puede establecer la autoridad en función del inquilino de origen de la cuenta cuando utilice usuarios invitados. Las propiedades de authRequest pueden modificarse, pero siempre deben extender las de originalAuthRequest, como se muestra a continuación:

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