Partilhar via


Modo de dispositivo compartilhado para dispositivos Android

Os trabalhadores da linha de frente, como associados de varejo, membros da tripulação de voo e trabalhadores de serviço de campo, geralmente usam um dispositivo móvel compartilhado para realizar seu trabalho. Esses dispositivos compartilhados podem apresentar riscos de segurança se seus usuários compartilharem suas senhas ou PINs, intencionalmente ou não, para acessar dados de clientes e empresas no dispositivo compartilhado.

O modo de dispositivo compartilhado permite configurar um dispositivo Android 8.0 ou superior para que os funcionários possam compartilhar o dispositivo com segurança. Os funcionários podem iniciar sessão uma vez e obter início de sessão único (SSO) em todas as aplicações que suportam esta funcionalidade, proporcionando-lhes um acesso mais rápido às informações. Quando os funcionários saem após concluírem seu turno ou tarefa, eles são automaticamente desconectados do dispositivo e de todos os aplicativos suportados, tornando o dispositivo pronto para o próximo usuário.

Para tirar partido da funcionalidade Modo de Dispositivo Partilhado, os programadores de aplicações e os administradores de dispositivos na nuvem trabalham em conjunto:

  1. Os administradores de dispositivos preparam o dispositivo para ser partilhado manualmente ou utilizando um fornecedor de gestão de dispositivos móveis (MDM) como o Microsoft Intune. A opção preferida é usar um MDM, pois ele permite a configuração do dispositivo no modo de dispositivo compartilhado em escala por meio do provisionamento zero-touch. O MDM envia o aplicativo Microsoft Authenticator para os dispositivos e ativa o "Modo Compartilhado" para cada dispositivo por meio de uma atualização de configuração gerenciada para o dispositivo. Esta definição de Modo Partilhado é o que altera o comportamento das aplicações suportadas no dispositivo. Essa configuração do provedor de MDM define o modo de dispositivo compartilhado para o dispositivo e dispara o registro de dispositivo compartilhado usando o aplicativo Authenticator.

  2. Os desenvolvedores de aplicativos escrevem um aplicativo de conta única (aplicativos de várias contas não são suportados no modo de dispositivo compartilhado) para lidar com o seguinte cenário:

    • Iniciar sessão num dispositivo de utilizador através de qualquer aplicação suportada
    • Saia de um usuário em todo o dispositivo por meio de qualquer aplicativo compatível
    • Consultar o estado do dispositivo para determinar se a sua aplicação está num dispositivo que está no modo de dispositivo partilhado
    • Consultar o estado do dispositivo do usuário para determinar quaisquer alterações em seu aplicativo desde o último uso

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

    Importante

    Os aplicativos da Microsoft que suportam o modo de dispositivo compartilhado no Android não exigem alterações e só precisam ser instalados no dispositivo para obter os benefícios que vêm com o modo de dispositivo compartilhado.

Configurar o dispositivo no Modo de Dispositivo Partilhado

Para configurar seu dispositivo Android para suportar o modo de dispositivo compartilhado, ele deve estar executando o Android OS 8.0 ou posterior. O dispositivo também deve ser limpo pela redefinição de fábrica ou ter todos os aplicativos habilitados para o modo de dispositivo compartilhado da Microsoft e outros desinstalados e reinstalados.

O Microsoft Intune suporta o provisionamento zero-touch para dispositivos no modo de dispositivo compartilhado do Microsoft Entra, o que significa que o dispositivo pode ser configurado e registrado no Intune com o mínimo de interação do trabalhador da linha de frente. Para configurar o dispositivo no modo de dispositivo compartilhado ao usar o Microsoft Intune como MDM, consulte Configurar o registro para dispositivos no modo de dispositivo compartilhado do Microsoft Entra.

Modifique seu aplicativo Android para suportar o modo de 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 seu aplicativo que uma alteração ocorreu e deve ser tratada. Você é responsável por verificar o estado do usuário no dispositivo toda vez que seu aplicativo é usado e, em seguida, limpar os dados do usuário anterior. Isso inclui se ele for recarregado em segundo plano em multitarefas. Em uma alteração de usuário, você deve garantir que os dados do usuário anterior sejam limpos e que todos os dados armazenados em cache exibidos em seu aplicativo sejam removidos. É altamente recomendável que você e sua empresa conduzam um processo de revisão de segurança depois de atualizar seu aplicativo para oferecer suporte ao modo de dispositivo compartilhado.

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

Adicione a biblioteca MSAL como uma dependência em seu arquivo build.gradle, assim:

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

Configurar seu aplicativo para usar o modo de dispositivo compartilhado

Os aplicativos escritos usando o SDK da Biblioteca de Autenticação da Microsoft (MSAL) podem gerenciar uma única conta ou várias contas. Para obter detalhes, consulte Modo de conta única ou Modo de conta múltipla. As aplicações de modo de dispositivo partilhado só funcionam no modo de conta única.

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

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 configurar seu arquivo de configuração.

Suporte a contas únicas e múltiplas

Seu aplicativo pode ser criado para suportar a execução em dispositivos pessoais e compartilhados. Se a sua aplicação suportar atualmente várias contas e pretender suportar o modo de dispositivo partilhado, adicione suporte para o modo de conta única.

Você também pode querer que seu aplicativo altere seu comportamento dependendo do tipo de dispositivo em que está sendo executado. Use ISingleAccountPublicClientApplication.isSharedDevice() para determinar quando executar no modo de conta única.

Há duas interfaces diferentes que representam o tipo de dispositivo em que seu aplicativo está. Quando você solicita uma instância de aplicativo da fábrica de aplicativos 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 ele significa no contexto de um dispositivo compartilhado:

modelo de herança de aplicativo cliente público

Você precisa fazer uma verificação de tipo e transmitir para a interface apropriada quando você recebe seu PublicClientApplication objeto. O código a seguir verifica vários modos de conta ou modos de conta única e transmite o objeto de aplicativo apropriadamente:

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 seguintes diferenças se aplicam dependendo se seu aplicativo está sendo executado em um dispositivo compartilhado ou pessoal:

Dispositivo de modo compartilhado Dispositivo pessoal
Contas Conta única Várias contas
Iniciar sessão A nível mundial A nível mundial
Sair A nível mundial Cada aplicativo pode controlar se a saída é local para o aplicativo.
Tipos de conta suportados Apenas contas de trabalho Contas pessoais e profissionais suportadas

Inicializar o objeto PublicClientApplication

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

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 */
        }
    });

Detetar o modo de dispositivo compartilhado

Detetar o modo de dispositivo compartilhado é importante para seu aplicativo. Muitos aplicativos exigem uma alteração em sua experiência do usuário (UX) quando o aplicativo é usado em um dispositivo compartilhado. Por exemplo, seu aplicativo pode ter um recurso "Inscrição", que não é apropriado para um trabalhador da linha de frente porque ele provavelmente já tem uma conta. Você também pode querer adicionar segurança extra ao processamento de dados do seu aplicativo se ele estiver no modo de dispositivo compartilhado.

Use a isSharedDevice API no IPublicClientApplication para determinar se um aplicativo está sendo executado em um dispositivo no modo de dispositivo compartilhado.

Os trechos de código a seguir mostram exemplos de uso da isSharedDevice API.

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

Obter o usuário conectado e determinar se um usuário foi alterado no dispositivo

Outra parte importante do suporte ao modo de dispositivo compartilhado é determinar o estado do usuário no dispositivo e limpar os dados do aplicativo se um usuário tiver alterado ou se não houver nenhum usuário no dispositivo. Você é responsável por garantir que os dados não vazem para outro usuário.

Você pode usar getCurrentAccountAsync a API para consultar a conta atualmente conectada no dispositivo.

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

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
    }
  }
}

Iniciar sessão globalmente num utilizador

Quando um dispositivo é configurado como um dispositivo compartilhado, seu aplicativo pode chamar a signIn API para entrar na conta. A conta estará disponível globalmente para todas as aplicações elegíveis no dispositivo depois de a primeira aplicação iniciar sessão na conta.

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

Sair globalmente de um usuário

O código a seguir remove a conta conectada e limpa os tokens armazenados em cache não apenas do aplicativo, mas também do dispositivo que está no modo de dispositivo compartilhado. No entanto, ele não limpa os dados do seu aplicativo. Você deve limpar os dados do seu aplicativo e limpar todos os dados armazenados em cache que seu aplicativo possa estar exibindo 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 detetar saída global iniciada de outros aplicativos

Para receber a transmissão de mudança de conta, você precisa registrar um recetor de transmissão. Recomenda-se registar o seu recetor de transmissão através dos recetores registados no contexto.

Quando uma transmissão de alteração de conta é recebida, obtenha imediatamente o usuário conectado e determine se um usuário foi alterado no dispositivo. Se uma alteração for detetada, inicie a limpeza de dados para a conta conectada anteriormente. Recomenda-se parar corretamente todas as operações e fazer a limpeza de dados.

O trecho de código a seguir mostra como você pode registrar um recetor 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);
}

Aplicações Microsoft que suportam o modo de dispositivo partilhado

Estas aplicações da Microsoft suportam o modo de dispositivo partilhado Microsoft Entra:

MDMs de terceiros que suportam o modo de dispositivo compartilhado

Estes fornecedores de Gestão de Dispositivos Móveis (MDM) de terceiros suportam o modo de dispositivo partilhado Microsoft Entra:

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

Quando um usuário sai, você precisa tomar medidas para proteger a privacidade e os dados do usuário. Por exemplo, se estiver a criar uma aplicação de registos médicos, pretende certificar-se de que, quando o utilizador terminar sessão, os registos de pacientes apresentados anteriormente são limpos. Seu aplicativo deve estar preparado para a privacidade de dados e verificar toda vez que entrar em primeiro plano.

Quando seu aplicativo usa o MSAL para sair do usuário em um aplicativo em execução no dispositivo que está 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 é executado. O diagrama abrange desde o momento em que uma atividade é iniciada, entrando e saindo de uma conta, e como eventos como pausa, retomada e interrupção da atividade se encaixam.

Ciclo de vida do aplicativo de dispositivo compartilhado

Próximos passos

Configure um dispositivo Android para executar aplicações no modo de dispositivo partilhado e teste a sua aplicação.

Modo de dispositivo compartilhado para dispositivos Android