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

Antes de 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 login de redirecionamento .

Se 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, consulte Logon único (SSO) com dica de usuário.

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

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

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

  • Use um redirecionamento se os usuários tiverem restrições de navegador ou políticas em que as janelas pop-up estejam desativadas. Por exemplo, existem 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);
  });

Iniciar sessão 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 partilhados, os utilizadores devem utilizar o modo privado/anónimo do 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 práticas recomendadas de privacidade e segurança.

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

Se um usuário optar por não sair usando as recomendações, a seguir estão outros métodos para habilitar a funcionalidade de logout:

  • Logout do canal frontal do OpenID Connect da Microsoft para saída federada. Pode utilizar esta opção quando uma aplicação partilha um estado de início de sessão com uma nova aplicação, mas gere os seus próprios tokens/cookies de sessão. Existem algumas limitações a esta implementação quando o conteúdo é bloqueado, por exemplo, quando os navegadores bloqueiam cookies de terceiros.

  • Janela pop-up e/ou um Redirecionamento para sair do aplicativo local. Os métodos pop-up e de redirecionamento encerram a sessão do usuário no ponto de extremidade e para o aplicativo local. Mas, esses métodos podem não limpar imediatamente a sessão para outros aplicativos federados se a comunicação de canal frontal estiver bloqueada.

Sair com uma janela 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 sair, o redirecionamento assume como padrão a página inicial de entrada e o pop-up é fechado.

Para a experiência após a saída, você pode definir o postLogoutRedirectUri para redirecionar o 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 home page ou a página de login, 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 logout método na v1 e um logoutRedirect método na v2 que limpa o cache no armazenamento do navegador e redireciona para a página de saída do Microsoft Entra. Após sair, o redirecionamento assume como padrão a página inicial de entrada.

Para a experiência após a saída, você pode definir o postLogoutRedirectUri para redirecionar o 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 das práticas recomendadas de privacidade na Internet sobre o uso de um navegador privado e da tela de bloqueio não é mostrado nesse método, convém 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óximos passos

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