Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Por predefinição, a sua aplicação tem suporte multicliente, uma vez que o MSAL define o inquilino na autoridade como 'common' caso este não seja especificado na configuração. Isto permite que qualquer conta Microsoft se possa autenticar na sua aplicação. Se não estiver interessado no comportamento multilocatário, terá de definir a propriedade de configuração authority ao instanciar o MSAL no app.module.ts, conforme mostrado abaixo.
@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 {}
Se permitir a autenticação multi-inquilinos e não pretender permitir que todos os utilizadores com uma conta Microsoft utilizem a sua aplicação, terá de fornecer o seu próprio método para filtrar os emissores de tokens, de modo a permitir apenas os inquilinos autorizados a iniciar sessão.
Mudança do inquilino
O locatário também pode ser definido dinamicamente através da instanciação de uma nova instância do MSAL no componente em causa, conforme ilustrado abaixo.
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'
}
});
}
Pedido de autenticação dinâmica
Por predefinição, o MsalGuard e o MsalInterceptor utilizam as propriedades estáticas definidas na configuração. Ambos também podem ser configurados com um método para o authRequest, permitindo que os parâmetros utilizados para autenticação sejam alterados dinamicamente.
MsalInterceptor - pedido de autenticação dinâmico (tokens multitenant)
Se organizations ou common forem usados como locatário, todos os tokens serão pedidos para o locatário de origem dos utilizadores. No entanto, este pode não ser o resultado desejado. Se um utilizador for convidado como convidado, os tokens podem ser da autoridade errada.
Definir o authRequest in the MsalInterceptorConfig como um método permite-te alterar dinamicamente o pedido de autenticação. Por exemplo, pode definir a autoridade com base no inquilino principal da conta ao usar utilizadores convidados.
As propriedades em authRequest podem ser alteradas, mas devem sempre estender o originalAuthRequest como abaixo:
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
}
]
});