Modo de dispositivo partilhado para dispositivos Android

Trabalhadores da linha da frente, como associados de retalho, membros da tripulação de voo e trabalhadores de serviço de campo, frequentemente utilizam um dispositivo móvel partilhado para desempenhar o seu trabalho. Estes dispositivos partilhados podem representar riscos de segurança se os seus utilizadores partilharem as suas palavras-passe ou PINs, intencionalmente ou não, para aceder a dados do cliente e da empresa no dispositivo partilhado.

O modo de dispositivo partilhado permite-lhe configurar um dispositivo Android 8.0 ou superior para que os funcionários possam partilhar o dispositivo de forma segura. Os colaboradores podem iniciar sessão uma vez e obter login único (SSO) em todas as aplicações que suportam esta funcionalidade, dando-lhes acesso mais rápido à informação. 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 de Modo Dispositivo Partilhado, os programadores de aplicações e os administradores de dispositivos na cloud trabalham em conjunto:

  1. Os administradores de dispositivos preparam o dispositivo para ser partilhado manualmente ou através de 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 a aplicação Microsoft Authenticator para os dispositivos e ativa o "Modo Partilhado" para cada dispositivo através de uma atualização de configuração gerida do dispositivo. Esta definição de Modo Partilhado é o que altera o comportamento das aplicações suportadas no dispositivo. Esta configuração do fornecedor MDM define o modo de dispositivo partilhado para o dispositivo e aciona o registo partilhado do dispositivo usando a aplicação Authenticator.

  2. Os programadores de aplicações escrevem uma aplicação de conta única (aplicações de múltiplas contas não são suportadas em modo de dispositivo partilhado) para lidar com o seguinte cenário:

    • Inicie sessão de um utilizador ao nível do dispositivo através de qualquer aplicação suportada
    • Termine a sessão de um utilizador em todo o dispositivo através de qualquer aplicação suportada
    • Consulta o estado do dispositivo para determinar se a tua aplicação está num dispositivo em modo de dispositivo partilhado
    • Consulte o estado do dispositivo do utilizador para determinar quaisquer alterações na sua aplicação desde a última utilização

    Suportar o modo dispositivo partilhado deve ser considerado uma melhoria de funcionalidade para a sua aplicação e pode ajudar a aumentar a sua adoção em ambientes onde o mesmo dispositivo é usado por vários utilizadores.

    Important

    As aplicações Microsoft que suportam o modo dispositivo partilhado no Android não precisam de alterações e só precisam de ser instaladas no dispositivo para obter os benefícios do modo dispositivo partilhado.

Configurar dispositivo em Modo de Dispositivo Partilhado

Para configurar o seu dispositivo Android para suportar o modo de dispositivo partilhado, deve estar a correr o Android OS 8.0 ou posterior. O dispositivo também deve ser limpo através de uma reposição de fábrica ou devem ser desinstaladas e reinstaladas todas as aplicações da Microsoft e outras aplicações com o modo de dispositivo partilhado ativado.

O Microsoft Intune suporta o aprovisionamento sem intervenção para dispositivos no modo de dispositivo partilhado do Microsoft Entra, o que significa que o dispositivo pode ser configurado e inscrito no Microsoft Intune com uma intervenção mínima do trabalhador da linha da frente. Para configurar o dispositivo no modo de dispositivo partilhado quando utiliza o Microsoft Intune como MDM, consulte Configurar a inscrição de dispositivos no modo de dispositivo partilhado do Microsoft Entra.

Modifique a sua aplicação Android para suportar o modo de dispositivo partilhado

Os seus utilizadores dependem de si para garantir que os seus dados não são divulgados a outro utilizador. As secções seguintes fornecem sinais úteis para indicar à sua candidatura que ocorreu uma alteração e que deve ser tratada. És responsável por verificar o estado do utilizador no dispositivo sempre que a tua aplicação é usada e depois por limpar os dados do utilizador anterior. Isto inclui os casos em que é recarregado a partir de segundo plano em multitarefa. Numa alteração de utilizador, deve garantir que tanto os dados do utilizador anterior são apagados como que quaisquer dados em cache exibidos na sua aplicação são removidos. Recomendamos vivamente que você e a sua empresa realizem um processo de revisão de segurança após atualizar a sua aplicação para suportar o modo dispositivo partilhado.

Adicione o Biblioteca de Autenticação da Microsoft (MSAL) SDK às dependências da sua aplicação

Adicione a biblioteca MSAL como uma dependência no seu ficheiro 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 em modo dispositivo partilhado só funcionam em modo de conta única.

Se não planeias suportar o modo de múltiplas contas, define "account_mode" para "SINGLE" no ficheiro 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 "account_mode" é "MULTIPLE", portanto, é importante alterar esse valor no ficheiro de configuração se estiver a usar o modo "single account".

Aqui está um exemplo do ficheiro 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.

Suportando tanto conta única como múltiplas contas

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 Aplicações Públicas de Cliente

Você precisa fazer uma verificação de tipo e converter para a interface apropriada quando receber o seu objeto PublicClientApplication. O código a seguir verifica modos de conta múltiplos ou modos de conta única e converte o objeto de aplicação 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 Global Global
Sair Global Cada aplicação pode controlar se a saída é local à aplicação.
Tipos de conta suportados Apenas contas de trabalho Contas pessoais e profissionais suportadas

Inicializar o objeto PublicClientApplication

Se definir "account_mode":"SINGLE" no arquivo de configuração do MSAL, pode converter com segurança o objeto de aplicação 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 */
        }
    });

Detetar o modo de dispositivo partilhado

Detetar o modo de dispositivo partilhado é importante para a sua aplicação. Muitas aplicações requerem uma alteração na sua experiência de utilizador (UX) quando a aplicação é usada num dispositivo partilhado. Por exemplo, a sua candidatura pode ter uma funcionalidade de "Inscrição", que não é apropriada para um trabalhador da linha da frente porque provavelmente já tem uma conta. Também pode querer adicionar segurança extra ao tratamento dos dados pela sua aplicação se estiver em modo dispositivo partilhado.

Utilize a API isSharedDevice no IPublicClientApplication para determinar se uma aplicação está a correr num dispositivo em modo de dispositivo partilhado.

Os seguintes excertos de código mostram exemplos de utilização da isSharedDevice API.

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

Obtenha o utilizador com sessão iniciada e determine se houve alteração de utilizador no dispositivo

Outra parte importante do suporte ao modo de dispositivo partilhado é determinar o estado do utilizador no dispositivo e apagar os dados da aplicação se o utilizador mudou ou se não houver utilizador no dispositivo. És responsável por garantir que os dados não são divulgados para outro utilizador.

Pode usar a API getCurrentAccountAsync para consultar a conta com sessão iniciada no dispositivo.

O loadAccount método recupera a conta do usuário conectado. O método onAccountChanged determina se o utilizador autenticado foi alterado e, se for o caso, efetue a limpeza:

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 de forma global para um utilizador

Quando um dispositivo está configurado como um dispositivo partilhado, a sua aplicação pode ligar à signIn API para iniciar sessão na conta. A conta estará disponível globalmente para todas as aplicações elegíveis no dispositivo após a primeira aplicação iniciar sessão na conta.

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

Terminar sessão globalmente para um utilizador

O código seguinte remove a conta com sessão iniciada e limpa os tokens em cache não só da aplicação, mas também do dispositivo que se encontra em modo de dispositivo partilhado. No entanto, não apaga os dados da sua candidatura. Deve apagar os dados da sua aplicação e eliminar quaisquer dados em cache que a sua aplicação possa estar a mostrar ao utilizador.

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. É recomendado registar o seu recetor de transmissão utilizando os 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 Microsoft suportam o modo de dispositivo partilhado Microsoft Entra:

MDMs de terceiros que suportam o modo de dispositivo partilhado

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

Encerramento partilhado do dispositivo e o ciclo de vida global da aplicação

Quando um utilizador faz logout, é necessário agir para proteger a privacidade e os dados do utilizador. Por exemplo, se estiver a criar uma aplicação de registos médicos, deve garantir que, quando o utilizador termina a sessão, os registos dos pacientes apresentados anteriormente são eliminados. A sua aplicação deve estar preparada para a privacidade dos dados e verificar isso sempre que passar para primeiro plano.

Quando a sua aplicação usa MSAL para desligar o utilizador numa aplicação a correr num dispositivo em modo partilhado, a conta iniciada e os tokens em cache são removidos tanto da aplicação como do dispositivo.

O diagrama seguinte mostra o ciclo de vida global da aplicação e os eventos comuns que podem ocorrer enquanto a sua aplicação está a funcionar. O diagrama abrange desde o momento em que uma atividade é iniciada, o início e o fim de sessão numa conta, e como eventos como pausar, retomar e parar a atividade se enquadram.

Ciclo de vida da aplicação partilhada do dispositivo

Passos seguintes

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