Aplicativo de página única: Entrar e sair

Saiba como adicionar início de sessão ao código da sua aplicação de página única.

Antes de obter tokens para acessar APIs em seu aplicativo, você precisa de um contexto de usuário autenticado. Pode iniciar sessão de utilizadores na sua aplicação de MSAL.js de duas formas:

Opcionalmente, você também pode passar os escopos das APIs para as quais você precisa que o usuário consinta no momento da entrada.

Se seu aplicativo já tiver acesso a um contexto de usuário autenticado ou token de ID, você poderá pular a etapa de login e adquirir tokens diretamente. Para obter detalhes, consulte SSO com dica de usuário.

Escolher entre uma experiência de início de sessão pop-up ou de redirecionamento

A escolha entre uma experiência pop-up ou de redirecionamento depende do fluxo do seu aplicativo:

  • Se você não quiser que os usuários se afastem da página principal do aplicativo durante a autenticação, recomendamos o método pop-up. Como o redirecionamento de autenticação acontece em uma janela pop-up, o estado do aplicativo principal é preservado.

  • Se os usuários tiverem restrições de navegador ou políticas em que as janelas pop-up estejam desativadas, você poderá usar o método de redirecionamento. Use o método de redirecionamento com o navegador Internet Explorer, porque há problemas conhecidos com janelas pop-up no Internet Explorer.

Iniciar sessão com uma janela pop-up

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

myMsal
  .loginPopup(loginRequest)
  .then(function (loginResponse) {
    accountId = loginResponse.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  })
  .catch(function (error) {
    //login failure
    console.log(error);
  });

Entrar com redirecionamento

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

function handleResponse(response) {
  if (response !== null) {
    accountId = response.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  } else {
    // In case multiple accounts exist, you can select
    const currentAccounts = myMsal.getAllAccounts();

    if (currentAccounts.length === 0) {
      // no accounts signed-in, attempt to sign a user in
      myMsal.loginRedirect(loginRequest);
    } else if (currentAccounts.length > 1) {
      // Add choose account code here
    } else if (currentAccounts.length === 1) {
      accountId = currentAccounts[0].homeAccountId;
    }
  }
}

myMsal.handleRedirectPromise().then(handleResponse);

Comportamento de saída em navegadores

Quanto mais aplicativos um usuário tiver entrado e quiser sair, maior a chance de ocorrerem problemas, dadas as maneiras limitadas de implementar essa funcionalidade nos navegadores. As práticas recomendadas de privacidade na Internet da Microsoft recomendam que, em um dispositivo compartilhado em que um usuário queira sair de um aplicativo, o usuário use o modo privado/anônimo de um navegador e feche todas as janelas do navegador antes de se afastar do dispositivo.

Em dispositivos que não são compartilhados, os usuários devem aproveitar uma tela de bloqueio do sistema operacional para que possam bloquear ou sair de toda a sessão do sistema operacional no dispositivo. A Microsoft usa sua página de saída para lembrar os usuários dessas práticas recomendadas para ajudar a melhorar sua privacidade e segurança.

Para usuários que não optam por seguir a abordagem segura, o aplicativo pode tentar se preparar para ambos os seguintes casos:

  1. O usuário que iniciou a saída do aplicativo diretamente.
  2. De outro aplicativo que compartilha o estado de entrada com o novo aplicativo, mas gerencia seus próprios tokens/cookies de sessão.

Para o primeiro caso, as seções a seguir descrevem opções sobre como sair do usuário de um aplicativo local usando um pop-up ou redirecionamento.

Para o segundo caso em que a saída é iniciada a partir de outro aplicativo, a Microsoft usa o Logout do Canal Frontal do OpenID Connect para saída federada. Existem algumas limitações para esta implementação quando o conteúdo de terceiros é bloqueado, como quando os navegadores bloqueiam cookies de terceiros por padrão.

Os seguintes métodos pop-up e de redirecionamento encerrarão a sessão do usuário no ponto de extremidade e para o aplicativo local, mas podem não limpar imediatamente a sessão para outros aplicativos federados, se a comunicação de canal frontal estiver bloqueada. Para uma saída federada garantida, independentemente do comportamento do navegador, recomendamos as práticas recomendadas aos usuários de usar navegação privada ou telas de bloqueio.

Sair com uma janela pop-up

Este modo é suportado, mas tem as mesmas limitações de início de sessão com uma janela pop-up que as restrições ou políticas dos navegadores podem desativar as janelas pop-up. MSAL.js v2 e superior fornece um logoutPopup método que limpa o cache no armazenamento do navegador e abre uma janela pop-up para a página de saída do Microsoft Entra. Após a saída, o Microsoft Entra ID redireciona o pop-up de volta para o seu aplicativo e MSAL.js fechará o pop-up.

Você pode configurar o URI para o qual o ID do Microsoft Entra deve redirecionar após a saída definindo postLogoutRedirectUri. Esse URI deve ser registrado como um URI de redirecionamento no registro do aplicativo.

Você também pode configurar logoutPopup para redirecionar a janela principal para uma página diferente, como a home page ou a página de login, depois que o logout for concluído, passando mainWindowRedirectUri como parte da solicitação.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", // defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
  mainWindowRedirectUri: "your_app_main_window_redirect_uri",
};

await myMsal.logoutPopup(logoutRequest);

Sair com um redirecionamento

MSAL.js fornece um método na v1 e introduziu logoutRedirect o logout método na v2 que limpa o cache no armazenamento do navegador e redireciona a janela para a página de saída do Microsoft Entra. Após a saída, por padrão, o ID do Microsoft Entra redireciona de volta para a página que invocou o logout.

Como o usuário não verá o lembrete da Microsoft sobre as práticas recomendadas de privacidade na Internet sobre o uso de um navegador privado e tela de bloqueio, o aplicativo SPA também pode querer descrever as práticas recomendadas e lembrar os usuários de fechar todas as janelas do navegador.

Você pode configurar o URI para o qual ele deve redirecionar após a saída definindo postLogoutRedirectUri. Esse URI deve ser registrado como um URI de redirecionamento no registro do aplicativo.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
};

myMsal.logoutRedirect(logoutRequest);

Próximos passos

Passe para o próximo artigo neste cenário, Adquirindo um token para o aplicativo.