Compartilhar via


Aplicativo de página única: entrada e saída

Antes que você possa obter tokens para acessar APIs em seu aplicativo, você precisa de um contexto de usuário autenticado. Para autenticar um usuário, você pode usar uma janela pop-up e/ou um método de entrada de redirecionamento.

Se o seu aplicativo tiver acesso a um contexto de usuário autenticado ou token de ID, você poderá ignorar a etapa de entrada e adquirir tokens diretamente. Para obter detalhes, confira Logon único (SSO) com dica de usuário.

Escolher entre uma experiência de pop-up ou de redirecionamento

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

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

  • Use um redirecionamento se os usuários tiverem restrições ou políticas de navegador em que as janelas pop-up estão desabilitadas. Por exemplo, há problemas conhecidos relacionados a janelas pop-up no Internet Explorer.

Entrar 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 um 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

Para garantir a saída segura de um ou mais aplicativos, os seguintes métodos são recomendados:

  • Em dispositivos compartilhados, os usuários devem usar o modo privado/anônimo de um navegador e fechar todas as janelas do navegador antes de se afastarem do dispositivo.

  • Em dispositivos que não são compartilhados, os usuários devem usar uma tela de bloqueio do sistema operacional para 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 melhores práticas de privacidade e segurança.

Para obter mais informações, confira as melhores práticas de privacidade na Internet da Microsoft.

Se um usuário optar por não sair usando as recomendações, os seguintes métodos também servem para habilitar a funcionalidade de saída:

  • Logoff do Front Channel do OpenID Connect da Microsoft para saída federada. Você pode usar esta opção quando um aplicativo compartilha um estado de entrada com um novo aplicativo, mas gerencia seus próprios tokens/cookies de sessão. Há algumas limitações para esta implementação em que o conteúdo é bloqueado, por exemplo, quando os navegadores bloqueiam cookies de terceiros.

  • Janela pop-up e/ou redirecionamento para saída do aplicativo local. Os métodos de pop-up e redirecionamento encerram a sessão do usuário no ponto de extremidade e no aplicativo local. Porém, esses métodos podem não limpar imediatamente a sessão para outros aplicativos federados se a comunicação de front-channel estiver bloqueada.

Sair com uma janela pop-up

A MSAL.js v2 e superior fornece um método logoutPopup 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 redirecionamento usa como padrão a página inicial de entrada e a janela pop-up é fechada.

Para a experiência após a saída, você pode definir o postLogoutRedirectUri para redirecionamento do usuário para um URI específico. 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 página inicial ou a página de entrada, 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

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

Para a experiência após a saída, você pode definir o postLogoutRedirectUri para redirecionamento do usuário para um URI específico. Esse URI deve ser registrado como um URI de redirecionamento no registro do aplicativo.

Como o lembrete da Microsoft sobre as melhores práticas de privacidade da Internet sobre como usar um navegador privado e uma tela de bloqueio não é mostrado neste método, talvez você queira descrever as práticas recomendadas e lembrar os usuários de fechar todas as janelas do navegador.

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óximas etapas

Vá para o próximo artigo neste cenário, Adquirir um token para o aplicativo.