Tutorial: Uso del modo de dispositivo compartido en la aplicación Android

En este tutorial, los desarrolladores de Android y los administradores de inquilinos de Microsoft Entra conocerán el código, la aplicación Authenticator y la configuración del inquilino necesaria para habilitar el modo de dispositivo compartido para una aplicación de Android.

En este tutorial, aprenderá a:

  • Descargar un ejemplo de código
  • Habilitar y detectar el modo de dispositivo compartido
  • Detectar el modo de varias cuentas o de una sola
  • Detectar un conmutador de usuario y habilitar el inicio y cierre de sesión global
  • Configurar el inquilino y registrar la aplicación
  • Configuración de un dispositivo Android en el modo de dispositivo compartido
  • Ejecutar la aplicación de ejemplo

Prerrequisitos

Guía del desarrollador

En esta sección del tutorial se proporcionan instrucciones para desarrolladores que permiten implementar el modo de dispositivo compartido en una aplicación Android mediante la Biblioteca de autenticación de Microsoft (MSAL). Consulte el tutorial de MSAL para Android para ver cómo integrar MSAL con su aplicación Android, iniciar sesión con un usuario, llamar a Microsoft Graph y cerrar la sesión de un usuario.

Descarga del ejemplo

Clone la aplicación de ejemplo de GitHub. El ejemplo puede funcionar en modo de una o de varias cuentas.

Adición del SDK de MSAL al repositorio local de Maven

Si no está usando la aplicación de ejemplo, agregue la biblioteca MSAL como una dependencia en el archivo build.gradle, como se muestra a continuación:

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

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

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

Establezca "shared_device_mode_supported" como true en el archivo de configuración de MSAL.

Es posible que no tenga previsto admitir el modo de varias cuentas. Este podría ser el caso si no va a usar un dispositivo compartido y el usuario puede iniciar sesión en la aplicación con más de una cuenta al mismo tiempo. Si es así, establezca "account_mode" en "SINGLE". 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 del archivo auth_config.json incluido en el directorio app>main>res>raw de la aplicación de ejemplo:

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

Detección del modo de dispositivo compartido

El modo de dispositivo compartido le permite configurar dispositivos Android para que los compartan varios empleados, a la vez que ofrece la administración respaldada del dispositivo por parte de Microsoft Identity. Los empleados pueden iniciar sesión en sus dispositivos y acceder a la información sobre los clientes rápidamente. Cuando terminan su turno o su tarea, podrán cerrar la sesión de todas las aplicaciones en el dispositivo compartido con un solo clic y el dispositivo estará inmediatamente listo para que lo use el siguiente empleado.

Use isSharedDevice() para determinar si una aplicación se está ejecutando en un dispositivo que está en modo de dispositivo compartido. La aplicación podría usar esta marca para determinar si debe modificar la experiencia de usuario según corresponda.

Este es un fragmento de código que muestra cómo puede usar isSharedDevice(). Procede de la clase SingleAccountModeFragment de la aplicación de ejemplo:

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

Inicialización del objeto PublicClientApplication

Si establece "account_mode":"SINGLE" en el archivo de configuración MSAL, puede convertir de forma segura el objeto de aplicación devuelto como un ISingleAccountPublicCLientApplication.

private ISingleAccountPublicClientApplication mSingleAccountApp;

/*Configure your sample app and save state for this activity*/
PublicClientApplication.create(this.getApplicationCOntext(),
  R.raw.auth_config,
  new PublicClientApplication.ApplicationCreatedListener(){
  @Override
  public void onCreated(IPublicClientApplication application){
  mSingleAccountApp = (ISingleAccountPublicClientApplication)application;
  loadAccount();
  }
  @Override
  public void onError(MsalException exception){
  /*Fail to initialize PublicClientApplication */
  }
});

Detección del modo de varias cuentas o de una sola

Si va a escribir una aplicación que solo utilizarán los trabajadores de primera línea en un dispositivo compartido, se recomienda escribirla para que admita únicamente el modo de una sola cuenta. Esto incluye la mayoría de las aplicaciones que se centran en tareas, como las de registros médicos, facturas y la mayor parte de las de línea de negocio. De este modo, se simplificará el desarrollo, ya que no es necesario acomodar muchas características del SDK.

Si la aplicación admite varias cuentas y el modo de dispositivo compartido, debe realizar una comprobación de tipo y convertirla en la interfaz adecuada, como se muestra a continuación.

private IPublicClientApplication mApplication;

        if (mApplication instanceOf IMultipleAccountPublicClientApplication) {
          IMultipleAccountPublicClientApplication multipleAccountApplication = (IMultipleAccountPublicClientApplication) mApplication;
          ...
        } else if (mApplication instanceOf    ISingleAccountPublicClientApplication) {
           ISingleAccountPublicClientApplication singleAccountApplication = (ISingleAccountPublicClientApplication) mApplication;
            ...
        }

Obtención del usuario que ha iniciado sesión y comprobación de si un usuario ha cambiado 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;
        mSingleAccountApp.acquireTokenSilentAsync(SCOPES,"http://login.microsoftonline.com/common",getAuthSilentCallback());
      }
    }
    @Override
    public void onAccountChanged(@Nullable IAccount priorAccount, @Nullable Iaccount currentAccount)
    {
      if (currentAccount == null)
      {
        //Perform a cleanup task as the signed-in account changed.
        updateSingedOutUI();
      }
    }
    @Override
    public void onError(@NonNull Exception exception)
    {
    }
  }
}

Inicio de sesión de un usuario de forma global

El siguiente código permite al usuario del dispositivo iniciar sesión en otras aplicaciones que usan MSAL con la aplicación Authenticator:

private void onSignInClicked()
{
  mSingleAccountApp.signIn(getActivity(), SCOPES, null, getAuthInteractiveCallback());
}

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:

private void onSignOutClicked()
{
  mSingleAccountApp.signOut(new ISingleAccountPublicClientApplication.SignOutCallback()
  {
    @Override
    public void onSignOut()
    {
      updateSignedOutUI();
    }
    @Override
    public void onError(@NonNull MsalException exception)
    {
      /*failed to remove account with an exception*/
    }
  });
}

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

Guía del administrador

Los siguientes pasos describen cómo configurar su aplicación y poner su dispositivo en modo de dispositivo compartido.

Registro de la aplicación

En primer lugar, registre la aplicación en el inquilino de su organización. A continuación, proporcione estos valores en auth_config.json para que la aplicación se ejecute correctamente.

Para más información sobre cómo hacerlo, consulte Registro de la aplicación.

Nota:

Al registrar la aplicación, use la guía de inicio rápido que se encuentra a la izquierda y, a continuación, seleccione Android. De esta forma, llegará a una página en la que se le pedirá que proporcione el valor de Nombre del paquete y Hash de firma de la aplicación. Son muy importantes para garantizar que la configuración de la aplicación funcione. Después recibirá un objeto de configuración que puede usar para la aplicación que va a cortar y pegar en el archivo auth_config.json.

Configure your Android app page

Debe seleccionar Realizar este cambio por mí y, a continuación, proporcionar los valores que le solicite el inicio rápido. Una vez hecho esto, se generan todos los archivos de configuración necesarios.

Configure your project page

Configuración de un inquilino

Para las pruebas, configure lo siguiente en el inquilino: al menos dos empleados, un administrador de dispositivos en la nube y un administrador global. Establezca el Administrador de Dispositivos en la Nube modificando los Roles Organizativos. Para acceder a los roles organizativos, seleccione Identidad >Roles y administradores> Roles y administradores> Todos los roles y, a continuación, seleccione Administrador de dispositivos en la nube. Agregue los usuarios que puedan poner un dispositivo en modo compartido.

Configuración de un dispositivo Android en el modo compartido

Descarga de la aplicación Authenticator

Descargue la aplicación Microsoft Authenticator de Google Play. Si ya ha descargado la aplicación, asegúrese de que es la versión más reciente.

Configuración de la aplicación Authenticator y registro del dispositivo en la nube

Inicie la aplicación Authenticator y vaya a la página principal de la cuenta. Una vez que vea la página Agregar cuenta, estará listo para compartir el dispositivo.

Authenticator add account screen

Vaya al panel Configuración con la barra de menús del lado derecho. Seleccione Registro del dispositivo en Cuentas profesionales y educativas.

Authenticator settings screen

Al hacer clic en este botón, se le pedirá que autorice el acceso a los contactos del dispositivo. Esto se debe a la integración de la cuenta de Android en el dispositivo. Elija permitir.

Authenticator allow access confirmation screen

El administrador de dispositivos en la nube debe escribir su correo electrónico de la organización en Registro como dispositivo compartido. A continuación, haga clic en el botón Registrar como dispositivo compartido y escriba sus credenciales.

Device registration screen in app

App screenshot showing Microsoft sign-in page

El dispositivo ya está en modo compartido.

App screen showing shared device mode enabled

Cualquier inicio y cierre de sesión en el dispositivo será global, lo que significa que se aplicará a todas las aplicaciones que estén integradas con MSAL y Microsoft Authenticator en el dispositivo. Ahora puede implementar aplicaciones en el dispositivo que usen las características del modo de dispositivo compartido.

Ver el dispositivo compartido

Una vez que haya colocado un dispositivo en modo compartido, será conocido para la organización y se realizará su seguimiento en el inquilino de esta. Puede ver sus dispositivos compartidos mirando el Tipo de unión.

Screenshot that shows the all devices pane

Ejecución de la aplicación de ejemplo

El ejemplo es una aplicación sencilla que llamará a la instancia de Graph API de la organización. En la primera ejecución, se le pedirá su consentimiento ya que la aplicación es nueva en la cuenta de empleado.

Application configuration info screen

Pasos siguientes

Obtenga más información sobre cómo trabajar con la Biblioteca de autenticación de Microsoft y el modo de dispositivo compartido en dispositivos Android: