Compartir vía


Modo de dispositivo compartido para dispositivos Android

Los trabajadores de primera línea, como los asociados comerciales, los miembros de la tripulación de vuelos y los trabajadores de servicios de campo, suelen usar un dispositivo móvil compartido para realizar su trabajo. Estos dispositivos compartidos pueden presentar riesgos para la seguridad si los usuarios comparten sus contraseñas o PIN, intencionalmente o no, para acceder a los datos de clientes y empresariales en el dispositivo compartido.

El modo de dispositivo compartido te permite configurar un dispositivo Android 8.0 o superior para que los empleados puedan compartirlo de forma segura. Los empleados pueden iniciar sesión una vez y obtener el inicio de sesión único (SSO) en todas las aplicaciones que admiten esta característica, lo que les proporciona un acceso más rápido a la información. Cuando los empleados cierran sesión después de completar su turno o tarea, cierran sesión automáticamente en el dispositivo y todas las aplicaciones compatibles, lo que hace que el dispositivo esté listo para el siguiente usuario.

Para sacar provecho de la característica del modo de dispositivo compartido, los desarrolladores de aplicaciones y los administradores de dispositivos en la nube trabajan juntos:

  1. Los administradores de dispositivos preparan el dispositivo para que se comparta manualmente o mediante un proveedor de administración de dispositivos móviles (MDM) como Microsoft Intune. La opción preferida es usar un MDM, ya que permite la configuración del dispositivo en modo de dispositivo compartido a escala a través del aprovisionamiento sin intervención. MDM envía la aplicación Microsoft Authenticator a los dispositivos y activa el "modo compartido" en cada dispositivo mediante una actualización de configuración en el dispositivo. Esta configuración de modo compartido es lo que cambia el comportamiento de las aplicaciones compatibles en el dispositivo. Esta configuración del proveedor MDM establece el modo de dispositivo compartido para el dispositivo y desencadena el registro de dispositivos compartidos mediante la aplicación Authenticator.

  2. Los desarrolladores de aplicaciones escriben una aplicación de una sola cuenta (las aplicaciones de varias cuentas no se admiten en el modo de dispositivo compartido) para controlar este escenario:

    • Inicio de sesión de un usuario en todo el dispositivo en cualquier aplicación compatible
    • Cierre de sesión de un usuario en todo el dispositivo en cualquier aplicación compatible
    • Consulta del estado del dispositivo para determinar si la aplicación está en un dispositivo que a su vez está en modo de dispositivo compartido
    • Consulta del estado del dispositivo del usuario para determinar si ha cambiado algo desde la última vez que se usó la aplicación

    La compatibilidad con el modo de dispositivo compartido debe considerarse una actualización de características para la aplicación y puede ayudar a aumentar su adopción en entornos donde se usa el mismo dispositivo entre varios usuarios.

    Importante

    Las aplicaciones de Microsoft que admiten el modo de dispositivo compartido en Android no requieren ningún cambio y solo deben instalarse en el dispositivo para obtener las ventajas ligadas al modo de dispositivo compartido.

Configuración del dispositivo en modo de dispositivo compartido

Para configurar el dispositivo Android para que admita el modo de dispositivo compartido, debe ejecutar Android OS 8.0 o posterior. El dispositivo también debe borrarse mediante el restablecimiento de fábrica o hacer que todas las aplicaciones Microsoft y habilitadas para el modo de dispositivo compartido se desinstalen y vuelvan a instalar.

Microsoft Intune admite el aprovisionamiento sin intervención manual para dispositivos en modo de dispositivo compartido de Microsoft Entra, lo que significa que el dispositivo se puede configurar e inscribir en Intune con una interacción mínima del trabajador de primera línea. Para configurar el dispositivo en modo de dispositivo compartido al usar Microsoft Intune como MDM, consulta Configurar la inscripción para dispositivos en modo de dispositivo compartido de Microsoft Entra.

Modificación de la aplicación Android para admitir el modo de dispositivo compartido

Los usuarios dependen de ti para asegurarse de que sus datos no se filtran a otro usuario. En las secciones siguientes se proporcionan señales útiles para indicar a la aplicación que se ha producido un cambio que se debe controlar. Eres el responsable de comprobar el estado del usuario en el dispositivo cada vez que se usa la aplicación, eliminando los datos del usuario anterior. Esto incluye cuando se vuelve a cargar desde segundo plano en modo multitarea. En un cambio de usuario, debes asegurarte de que se eliminan los datos del usuario anterior y se eliminan los datos almacenados en caché que se muestran en la aplicación. Te recomendamos que tú y tu empresa realicéis un proceso de revisión de seguridad después de actualizar la aplicación para que admita el modo de dispositivo compartido.

Adición del SDK de la biblioteca de autenticación de Microsoft (MSAL) a las dependencias de la aplicación

Agrega la biblioteca MSAL como una dependencia en el archivo build.gradle, como se muestra a continuación:

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

Configuración de la aplicación para que use el modo de dispositivo compartido

Las aplicaciones escritas mediante el SDK de la biblioteca de autenticación de Microsoft (MSAL) pueden administrar una sola cuenta o varias cuentas. Para obtener más información, consulta el modo de una sola cuenta o el modo de varias cuentas. Las aplicaciones en modo de dispositivo compartido solo funcionan en el modo de una sola cuenta.

Si no planeas admitir el modo de varias cuentas, establece "account_mode" en "SINGLE" en el archivo de configuración msal. De esta forma, se garantiza que la aplicación siempre obtendrá ISingleAccountPublicClientApplication y simplifica considerablemente la integración de MSAL. El valor predeterminado de "account_mode" es "MULTIPLE", por lo que es importante cambiar este valor en el archivo de configuración si utiliza el modo "single account".

Este es un ejemplo de un archivo de configuración:

{
  "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"
      }
    }
  ]
}

Consulta la documentación de configuración para obtener más información sobre cómo configurar el archivo de configuración.

Compatibilidad con una sola cuenta y con varias cuentas

La aplicación se puede crear para admitir la ejecución tanto en dispositivos personales como en dispositivos compartidos. Si la aplicación admite actualmente varias cuentas y deseas admitir el modo de dispositivo compartido, agrega compatibilidad para el modo de una sola cuenta.

Es posible que también quieras que la aplicación cambie su comportamiento en función del tipo de dispositivo en el que se ejecuta. Usa ISingleAccountPublicClientApplication.isSharedDevice() para determinar cuándo se debe ejecutar en el modo de una sola cuenta.

Hay dos interfaces diferentes que representan el tipo de dispositivo en el que se encuentra la aplicación. Cuando se solicita una instancia de aplicación de la factoría de aplicaciones de MSAL, se proporciona el objeto de aplicación correcto automáticamente.

En el modelo de objetos siguiente se muestra el tipo de objeto que puede recibir y lo que significa en el contexto de un dispositivo compartido:

modelo de herencia de aplicaciones cliente públicas

Tienes que realizar una comprobación de tipos y la conversión a la interfaz adecuada cuando obtengas el objeto PublicClientApplication. El siguiente código comprueba los modos de varias cuentas o de una sola cuenta, y convierte el objeto de aplicación de forma adecuada:

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

Las siguientes diferencias se aplican en función de si la aplicación se ejecuta en un dispositivo compartido o personal:

Dispositivo en modo compartido Dispositivo personal
Cuentas Una sola cuenta Varias cuentas
Inicio de sesión Global Global
Cierre de sesión Global Cada aplicación puede controlar si el cierre de sesión es local para la aplicación.
Tipos de cuenta admitidos Solo cuentas profesionales Se admiten cuentas personales y profesionales

Inicialización del objeto PublicClientApplication

Si establece "account_mode":"SINGLE" en el archivo de configuración de MSAL, puede convertir de forma segura el objeto de aplicación devuelto como un 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 */
        }
    });

Detección del modo de dispositivo compartido

La detección del modo de dispositivo compartido es importante para la aplicación. Muchas aplicaciones requerirán un cambio en la experiencia del usuario (UX) cuando la aplicación se use en un dispositivo compartido. Por ejemplo, la aplicación podría tener una característica de "registro", que no es adecuada para un trabajador de primera línea porque es probable que ya tenga una cuenta. Es posible que también quiera agregar seguridad adicional a la administración de datos de la aplicación si está en modo de dispositivo compartido.

Use la API isSharedDevice de IPublicClientApplication para determinar si una aplicación se ejecuta en un dispositivo que está en modo de dispositivo compartido.

Los fragmentos de código siguientes muestran ejemplos de uso de la API isSharedDevice.

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

Obtención del usuario que ha iniciado sesión y comprobación de si un usuario ha cambiado en el dispositivo

Otra parte importante de la compatibilidad con el modo de dispositivo compartido es determinar el estado del usuario en el dispositivo y eliminar los datos de la aplicación si un usuario ha cambiado o si no hay ningún usuario en el dispositivo. Usted es responsable de garantizar que los datos no se filtran a otro usuario.

Puede usar la API getCurrentAccountAsync para consultar la cuenta que actualmente ha iniciado sesión en el dispositivo.

El método loadAccount recupera la cuenta del usuario que ha iniciado sesión. El método onAccountChanged determina si el usuario con la sesión iniciada ha cambiado y, en tal caso, se limpia:

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

Inicio de sesión de un usuario de forma global

Cuando un dispositivo se configura como un dispositivo compartido, la aplicación puede llamar a la API signIn para iniciar sesión en la cuenta. La cuenta estará disponible globalmente para todas las aplicaciones válidas en el dispositivo una vez que la primera aplicación inicie sesión en dicha cuenta.

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

Cierre de sesión de un usuario de forma global

El siguiente código elimina la cuenta con la sesión iniciada y borra los tokens almacenados en caché no solo de la aplicación, sino también del dispositivo que está en modo de dispositivo compartido. Sin embargo, no elimina los datos de la aplicación. Debe eliminar los datos de la aplicación, así como borrar cualquier dato almacenado en caché que la aplicación pueda mostrar al usuario.

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

Recepción de difusión para detectar el cierre de sesión global iniciado desde otras aplicaciones

Para recibir la difusión de cambio de cuenta, debes registrar un receptor de difusión. Se recomienda registrar el receptor de difusión a través de los receptores registrados en contexto.

Cuando se recibe una difusión de cambio de cuenta, obtiene inmediatamente el usuario que ha iniciado sesión y determina si un usuario ha cambiado en el dispositivo. Si se detecta un cambio, inicie la limpieza de datos para la cuenta que ha iniciado sesión anteriormente. Se recomienda detener correctamente las operaciones y realizar la limpieza de datos.

En el siguiente fragmento de código se muestra cómo se puede registrar un receptor de difusión.

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

Aplicaciones de Microsoft que admiten el modo de dispositivo compartido

Estas aplicaciones de Microsoft admiten el modo de dispositivo compartido de Microsoft Entra:

MDM de terceros que admiten el modo de dispositivo compartido

Estos proveedores de administración de dispositivos móviles (MDM) de terceros que admiten el modo de dispositivo compartido de Microsoft Entra:

Cierre de sesión del dispositivo compartido y el ciclo de vida de la aplicación general

Cuando un usuario cierra la sesión, debes tomar medidas para proteger la privacidad y los datos del usuario. Por ejemplo, si vas a crear una aplicación de historias clínicas, querrás asegurarte de que cuando el usuario cierra la sesión, las historias de pacientes mostradas anteriormente se borran. La aplicación debe estar preparada para la privacidad de datos y comprobarse cada vez que entra en primer plano.

Cuando la aplicación usa MSAL para cerrar la sesión del usuario en una aplicación que se ejecuta en el dispositivo que está en modo compartido, la cuenta con sesión iniciada y los tokens almacenados en caché se quitan tanto de la aplicación como del dispositivo.

En el diagrama siguiente se muestra el ciclo de vida de la aplicación general y los eventos comunes que se pueden producir mientras se ejecuta la aplicación. El diagrama abarca desde el momento en que se inicia una actividad, el inicio y cierre de sesión en una cuenta y el modo en que se ajustan los eventos, como pueden ser la pausa, reanudación y detención de la actividad.

Ciclo de vida de la aplicación de dispositivo compartido

Pasos siguientes

Configura un dispositivo Android para ejecutar aplicaciones en modo de dispositivo compartido y probar la aplicación.

Modo de dispositivo compartido para dispositivos Android