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
- Una cuenta de Azure con una suscripción activa. Cree una cuenta gratuita.
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.
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.
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.
Vaya al panel Configuración con la barra de menús del lado derecho. Seleccione Registro del dispositivo en Cuentas profesionales y educativas.
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.
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.
El dispositivo ya está en modo compartido.
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.
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.
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:
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de