Adquirir tokens vinculados ao dispositivo usando WAM no Windows

O MSAL.js suporta a obtenção de tokens através do Web Account Manager (WAM) no Windows. Estes tokens estão ligados ao dispositivo onde foram adquiridos e não estão armazenados em cache no localStorage ou sessionStorage do navegador.

Ambientes suportados

Esta funcionalidade é atualmente suportada apenas no seguinte ambiente:

  • Uma máquina a correr uma versão do Windows que suporta a funcionalidade (mais informações sobre isto)
  • Os navegadores Chrome e Edge ou o Teams
  • A extensão Windows Accounts (versão 1.0.5 ou superior) está instalada se estiver a usar Chrome ou Edge
  • A aplicação deve estar alojada em https

Além disso, esta funcionalidade é atualmente suportada apenas para Contas de Trabalho e Escola

Ative a funcionalidade em MSAL.js

Para ativar esta funcionalidade em MSAL.js defina a allowPlatformBroker flag para true no seu objeto de configuração assim:

const msalConfig = {
    auth: {
        clientId: "insert-clientId"
    },
    system: {
        allowPlatformBroker: true
    }
};

Além disso, terá de chamar e aguardar a nova API initialize antes de invocar qualquer outra API do MSAL.js.

const pca = new PublicClientApplication(msalConfig);

// Initialize will establish a connection with the browser extension, if present
await pca.initialize();

// Call handleRedirectPromise, after initialization is complete
await pca.handleRedirectPromise();

// After initialize and handleRedirectPromise have completed, you may call any of the other APIs as you would without this feature
pca.acquireTokenSilent();

Não são necessárias outras alterações para suportar esta nova funcionalidade. Qualquer utilizador que aceda à sua aplicação a partir de um ambiente suportado poderá agora adquirir tokens vinculados ao dispositivo. Os utilizadores em ambientes não suportados continuarão a adquirir tokens através dos fluxos tradicionais baseados na web.

Um exemplo funcional pode ser encontrado aqui

Diferenças ao usar WAM para adquirir tokens

Existem algumas coisas que podem comportar-se de forma um pouco diferente ao adquirir tokens através do WAM.

  • Todas as configurações relacionadas com cache aplicam-se apenas à cache local do MSAL. O broker nativo controla a sua própria cache, mais segura, que é usada em vez do armazenamento do navegador e não suporta a configuração do seu comportamento na cache. Isto significa que pode receber um token em cache independentemente do valor dos parâmetros de pedido como: forceRefresh, cacheLookupPolicy ou storeInCache. Além disso, os tokens recebidos do broker nativo não são armazenados no armazenamento local nem no armazenamento de sessão, independentemente do que tenha configurado em PublicClientApplication.
  • Se o WAM precisar de pedir ao utilizador uma interação, será aberto um prompt do sistema. Este prompt parece um pouco diferente das janelas pop-up do navegador a que pode estar habituado.
  • Mudar a sua conta no prompt WAM não é suportado e MSAL.js dará um erro (Código de Erro: user_switch) se isso acontecer. É responsabilidade da tua app detetar este erro e tratá-lo de uma forma que faça sentido para os teus cenários (por exemplo, mostrar uma página de erro, tentar novamente com a nova conta, tentar novamente com a conta original, etc.)