Compartilhar via


Modo dispositivo compartilhado para dispositivos Android

Com frequência, os trabalhadores na linha de frente, como funcionários do comércio, membros de tripulações e trabalhadores de serviços de campo, usam um dispositivo móvel compartilhado para realizar seu trabalho. Esses dispositivos compartilhados podem apresentar riscos de segurança se os usuários compartilharem suas senhas ou PINs, intencionalmente ou não, para acessar dados de clientes e empresas no dispositivo compartilhado.

O modo dispositivo compartilhado permite a configuração de um dispositivo Android 8.0 ou superior, de modo que os funcionários possam compartilhar o dispositivo de forma segura. Os funcionários podem fazer logon uma vez e obter o SSO (logon único) de todos os aplicativos compatíveis com esse recurso, concedendo acesso mais rápido às informações. Quando os funcionários saírem, após concluir seu turno ou tarefa, eles serão automaticamente desconectados do dispositivo e de todos os aplicativos compatíveis, deixando o dispositivo pronto para o próximo usuário.

Para aproveitar o recurso do modo dispositivo compartilhado, os desenvolvedores de aplicativos e administradores de dispositivos de nuvem trabalham juntos:

  1. Os Administradores de dispositivos preparam manualmente o dispositivo a ser compartilhado ou usam um provedor de MDM (gerenciamento de dispositivo móvel), como o Microsoft Intune. A opção preferida é usar um MDM, pois ele permite a configuração do dispositivo no modo compartilhado em escala, por meio do provisionamento zero-touch. O MDM efetua push do aplicativo Microsoft Authenticator para os dispositivos e ativa o "Modo compartilhado" para cada dispositivo por meio de uma atualização da configuração gerenciada para o dispositivo. Essa configuração do Modo compartilhado é o que altera o comportamento dos aplicativos com suporte no dispositivo. Essa configuração do provedor de MDM define o modo dispositivo compartilhado e aciona o registro de dispositivo compartilhado usando o aplicativo Authenticator.

  2. Os desenvolvedores de aplicativos gravam um aplicativo de conta única (aplicativos de várias contas não são compatíveis com o modo dispositivo compartilhado) para administrar o seguinte cenário:

    • Conectar um usuário em todos os dispositivos em qualquer aplicativo compatível
    • Desconectar um usuário de todos os dispositivos em qualquer aplicativo compatível
    • Consulte o estado do dispositivo para determinar se o aplicativo está em um dispositivo com o modo dispositivo compartilhado
    • Consulte o estado do dispositivo do usuário para determinar mudanças no aplicativo desde o último uso

    O suporte ao modo dispositivo compartilhado deve ser considerado uma atualização de recurso para o aplicativo e pode ajudar a aumentar a adoção em ambientes no qual o mesmo dispositivo é usado entre vários usuários.

    Importante

    Os aplicativos da Microsoft compatíveis com o modo dispositivo compartilhado no Android não exigem alterações e só precisam ser instalados no dispositivo para obter os benefícios incluídos com o modo dispositivo compartilhado.

Configurar o dispositivo no modo dispositivo compartilhado

Para configurar o dispositivo Android para oferecer suporte ao modo dispositivo compartilhado, ele deverá executar o sistema operacional Android 8.0 ou posterior. O dispositivo também deve ser apagado pela redefinição de fábrica ou ter todos os aplicativos habilitados para o modo dispositivo compartilhado da Microsoft e outros aplicativos desinstalados e reinstalados.

O Microsoft Intune é compatível com o provisionamento zero-touch para dispositivos no modo dispositivo compartilhado do Microsoft Entra, o que significa que o dispositivo pode ser configurado e inscrito no Intune com interação mínima do trabalhador na linha de frente. Para configurar o dispositivo no modo dispositivo compartilhado ao usar o Microsoft Intune como o MDM, confira Configurar inscrição para dispositivos no modo dispositivo compartilhado do Microsoft Entra.

Modificar seu aplicativo Android para oferecer suporte ao modo dispositivo compartilhado

Seus usuários dependem de você para garantir que seus dados não sejam vazados para outro usuário. As seções a seguir fornecem sinais úteis para indicar ao aplicativo que uma alteração ocorreu e deve ser considerada. Você é responsável por verificar o estado do usuário no dispositivo toda vez que o aplicativo for usado, e por limpar os dados do usuário anterior. Isso inclui se ele foi recarregado na tela de fundo em várias tarefas. Em uma alteração de usuário, é necessário garantir que os dados do usuário anterior sejam apagados e que todos os dados armazenados em cache que estiverem sendo exibidos no aplicativo sejam removidos. É altamente recomendável que você e sua empresa realizem um processo de revisão da segurança após atualizar o aplicativo, para manter a compatibilidade com o modo dispositivo compartilhado.

Adicionar o SDK da MSAL (Biblioteca de Autenticação da Microsoft) às dependências do aplicativo

Adicione a biblioteca do MSAL como uma dependência no arquivo build.gradle, desta forma:

dependencies{
  implementation 'com.microsoft.identity.client.msal:5.+'
}

Configure seu aplicativo para usar o modo dispositivo compartilhado

Os aplicativos escritos usando o SDK da MSAL (Biblioteca de Autenticação da Microsoft) podem gerenciar uma única conta ou várias contas. Para obter detalhes, consulte modo conta única ou modo várias contas. Os aplicativos do modo dispositivo compartilhado funcionam apenas no modo conta única.

Se você não estiver planejando dar suporte ao modo várias contas, defina "account_mode" como "SINGLE" no arquivo de configuração msal. Isso garante que o aplicativo sempre obtenha ISingleAccountPublicClientApplication e simplifica significativamente a integração do MSAL. O valor padrão de "account_mode" é "MULTIPLE", portanto é importante alterar esse valor no arquivo de configuração se você estiver usando o modo "single account".

Aqui está um exemplo do arquivo de configuração:

{
  "client_id": "Client ID after app registration at https://aka.ms/MobileAppReg",
  "authorization_user_agent": "WEBVIEW",
  "redirect_uri": "Redirect URI after app registration at https://aka.ms/MobileAppReg",
  "account_mode": "SINGLE",
  "broker_redirect_uri_registered": true,
  "authorities": [
    {
      "type": "AAD",
      "audience": {
        "type": "AzureADandPersonalMicrosoftAccount",
        "tenant_id": "common"
      }
    }
  ]
}

Consulte a documentação de configuração para obter mais informações sobre como definir o arquivo de configuração.

Suporte à conta única e a várias contas

O aplicativo pode ser criado para dar suporte à execução em dispositivos pessoais e compartilhados. Se o aplicativo atualmente oferece suporte a várias contas e você quiser oferecer suporte ao modo dispositivo compartilhado, adicione suporte para o modo conta única.

Você também pode querer que o aplicativo altere o comportamento, conforme o tipo de dispositivo onde ele estiver sendo executado. Use ISingleAccountPublicClientApplication.isSharedDevice() para determinar quando executar no modo conta única.

Duas interfaces diferentes representam o tipo de dispositivo no qual seu aplicativo estiver. Quando você solicita uma instância de aplicativo do Application Factory da MSAL, o objeto de aplicativo correto é fornecido automaticamente.

O modelo de objeto a seguir ilustra o tipo de objeto que você pode receber e o que significa no contexto de um dispositivo compartilhado:

modelo de herança do aplicativo cliente público

Você precisa fazer uma verificação de tipo e uma conversão para a interface apropriada ao obter o objeto PublicClientApplication. O código a seguir verifica os modos de várias contas ou de conta única e faz a conversão apropriada do objeto de aplicativo:

private IPublicClientApplication mApplication;

        // Running in personal-device mode?
        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        // Running in shared-device mode?
        } else if (mApplication instanceOf ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

As diferenças a seguir se aplicam dependendo se o aplicativo está em execução em um dispositivo compartilhado ou pessoal:

Dispositivo no modo compartilhado Dispositivo pessoal
Contas Conta única Várias contas
Entrar Global Global
Sair Global Cada aplicativo pode controlar se a saída é local para o aplicativo.
Tipos de conta compatíveis Somente contas corporativas Contas pessoais e corporativas compatíveis

Inicializar o objeto PublicClientApplication

Se você definir "account_mode":"SINGLE" no arquivo de configuração do MSAL, você poderá converter com segurança o objeto de aplicativo retornado como um ISingleAccountPublicCLientApplication.

private ISingleAccountPublicClientApplication mSingleAccountApp;

PublicClientApplication.create(
    this.getApplicationCOntext(),
    R.raw.auth_config_single_account,
    new PublicClientApplication.ApplicationCreatedListener() {

        @Override
        public void onCreated(IPublicClientApplication application){
            mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
        }

        @Override
        public void onError(MsalException exception){
            /*Fail to initialize PublicClientApplication */
        }
    });

Detectar modo dispositivo compartilhado

A detecção do modo dispositivo compartilhado é importante para o aplicativo. Muitos aplicativos precisarão de uma alteração na experiência do usuário (UX) quando for usado em um dispositivo compartilhado. Por exemplo, o aplicativo pode ter um recurso de "Inscrição", que não é adequado para um trabalhador na linha de frente porque eles provavelmente já têm uma conta. Você também pode adicionar segurança extra à administração dos dados do aplicativo, se ele estiver no modo dispositivo compartilhado.

Use a API isSharedDevice no IPublicClientApplication para determinar se um aplicativo está em execução em um dispositivo no modo dispositivo compartilhado.

Os trechos de código a seguir mostram exemplos de como usar a API isSharedDevice.

deviceModeTextView.setText(mSingleAccountApp.isSharedDevice() ? "Shared" : "Non-Shared");

Conheça o usuário conectado e determine se um usuário foi alterado no dispositivo

Outra parte importante para a compatibilidade com o modo dispositivo compartilhado é determinar o estado do usuário no dispositivo e limpar os dados do aplicativo se um usuário tiver sido alterado ou se não houver nenhum usuário no dispositivo. Você é responsável por garantir que os dados não sejam vazados para outro usuário.

É possível usar a API getCurrentAccountAsync para consultar a conta conectada no dispositivo.

O método loadAccount recupera a conta do usuário conectado. O método onAccountChanged determina se o usuário conectado foi alterado e, nesse caso, limpa:

private void loadAccount()
{
  mSingleAccountApp.getCurrentAccountAsync(new ISingleAccountPublicClientApplication.CurrentAccountCallback())
  {
    @Override
    public void onAccountLoaded(@Nullable IAccount activeAccount)
    {
      if (activeAccount != null)
      {
        signedInUser = activeAccount;
        final AcquireTokenSilentParameters silentParameters = new AcquireTokenSilentParameters.Builder()
                        .fromAuthority(signedInUser.getAuthority())
                        .forAccount(signedInUser)
                        .withScopes(Arrays.asList(getScopes()))
                        .withCallback(getAuthSilentCallback())
                        .build();
        mSingleAccountApp.acquireTokenSilentAsync(silentParameters);
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        cleaUp();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
        //getCurrentAccountAsync failed
    }
  }
}

Conectar um usuário globalmente

Quando um dispositivo é configurado como um dispositivo compartilhado, o aplicativo poderá chamar a API signIn para entrar na conta. A conta estará disponível globalmente para todos os aplicativos qualificados no dispositivo depois que o primeiro aplicativo entrar na conta.

final SignInParameters signInParameters = ... /* create SignInParameters object */
mSingleAccountApp.signIn(signInParameters);

Desconectar um usuário globalmente

O código a seguir remove a conta conectada e limpa os tokens em cache não apenas do aplicativo, mas também no dispositivo que estiver no modo dispositivo compartilhado. No entanto, ele não limpa os dados do aplicativo. É necessário limpar os dados do aplicativo e limpar todos os dados armazenados em cache que o aplicativo exibir para o usuário.

mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback() {
    @Override
    public void onSignOut() {
        // clear data from your application
    }

    @Override
    public void onError(@NonNull MsalException exception) {
        // signout failed, show error
    }
});

Receber transmissão para detectar a saída global iniciada em outros aplicativos

Para receber a transmissão de alteração de conta, você precisa registrar um receptor de transmissão. É recomendável registrar o receptor de transmissão por meio dos Receptores registrados com contexto.

Quando uma transmissão de alteração de conta for recebida, obtenha imediatamente o usuário conectado e determine se esse usuário foi alterado no dispositivo. Se uma alteração for detectada, inicie a limpeza de dados da conta conectada anteriormente. É recomendável interromper corretamente todas as operações e fazer a limpeza dos dados.

O snippet de código abaixo mostra como você pode registrar um receptor de transmissão.

private static final String CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER = "com.microsoft.identity.client.sharedmode.CURRENT_ACCOUNT_CHANGED";
private BroadcastReceiver mAccountChangedBroadcastReceiver;
private void registerAccountChangeBroadcastReceiver(){
    mAccountChangedBroadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            //INVOKE YOUR PRIOR ACCOUNT CLEAN UP LOGIC HERE
        }
    };
    IntentFilter filter = new

    IntentFilter(CURRENT_ACCOUNT_CHANGED_BROADCAST_IDENTIFIER);
    this.registerReceiver(mAccountChangedBroadcastReceiver, filter);
}

Aplicativos da Microsoft compatíveis com o modo dispositivo compartilhado

Esses aplicativos da Microsoft são compatíveis com o modo dispositivo compartilhado do Microsoft Entra:

MDMs de terceiros compatíveis com o modo dispositivo compartilhado

Esses fornecedores de MDM (Gerenciamento de Dispositivo Móvel) são compatíveis com o modo dispositivo compartilhado do Microsoft Entra:

Saída do dispositivo compartilhado e ciclo de vida geral do aplicativo

Quando um usuário sair, você precisará tomar medidas para proteger a privacidade e os dados do usuário. Por exemplo, se você estiver criando um aplicativo de registros médicos, verifique se, quando o usuário sair, os registros de pacientes exibidos anteriormente sejam limpos. O aplicativo deverá estar preparado para a privacidade de dados e deverá verificar a cada vez que ele entrar no primeiro plano.

Quando o aplicativo usar MSAL para desconectar o usuário em um aplicativo em execução no dispositivo que estiver no modo compartilhado, a conta conectada e os tokens armazenados em cache são removidos do aplicativo e do dispositivo.

O diagrama a seguir mostra o ciclo de vida geral do aplicativo e os eventos comuns que podem ocorrer enquanto o aplicativo for executado. O diagrama abrange desde o momento em que uma atividade é iniciada, o processo de entrada e saída de uma conta e como eventos como pausar, retomar e encerrar a atividade se encaixam.

Ciclo de vida do aplicativo em um dispositivo compartilhado

Próximas etapas

Configure um dispositivo Android para executar aplicativos no modo dispositivo compartilhado e teste o aplicativo.

Modo dispositivo compartilhado para dispositivos Android