Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tutorial, aprenderá a modificar una aplicación iOS o iPadOS para admitir el modo de dispositivo compartido (SDM). SDM es una característica de Microsoft Entra ID que permite a las organizaciones configurar un dispositivo iOS, iPadOS o Android para facilitar el uso compartido entre varios empleados, una práctica común en la configuración de trabajo de primera línea.
En este tutorial, usted hará lo siguiente:
- Agregue compatibilidad con el modo de cuenta única.
- Configure la aplicación para usar SDM.
- Detectar si está activado el modo de dispositivo compartido.
- Identifique si el usuario que ha iniciado sesión ha cambiado.
Prerequisites
Detectar el modo de dispositivo compartido
La detección del modo de dispositivo compartido es importante para la aplicación. Muchas aplicaciones requieren un cambio en su experiencia de usuario (UX) cuando la aplicación se usa 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 tengan una cuenta. También puede añadir una capa adicional de seguridad al tratamiento de los datos de su aplicación si se ejecuta en un dispositivo en modo compartido.
Use la getDeviceInformationWithParameters:completionBlock: API en MSALPublicClientApplication para determinar si una aplicación se ejecuta en un dispositivo en modo de dispositivo compartido.
Los fragmentos de código siguientes muestran ejemplos de uso de la getDeviceInformationWithParameters:completionBlock: API.
Swift
application.getDeviceInformation(with: nil, completionBlock: { (deviceInformation, error) in
guard let deviceInfo = deviceInformation else {
return
}
let isSharedDevice = deviceInfo.deviceMode == .shared
// Change your app UX if needed
})
Objective-C
[application getDeviceInformationWithParameters:nil
completionBlock:^(MSALDeviceInformation * _Nullable deviceInformation, NSError * _Nullable error)
{
if (!deviceInformation)
{
return;
}
BOOL isSharedDevice = deviceInformation.deviceMode == MSALDeviceModeShared;
// Change your app UX if needed
}];
Obtener el usuario que ha iniciado sesión y determinar si un usuario ha cambiado en el dispositivo
Otra parte importante de admitir el modo de dispositivo compartido es determinar el estado del usuario en el dispositivo y borrar los datos de la aplicación si un usuario ha cambiado o si no hay ningún usuario en absoluto en el dispositivo. Usted es responsable de garantizar que los datos no se filtren a otro usuario.
Puede usar getCurrentAccountWithParameters:completionBlock: la API para consultar la cuenta que ha iniciado sesión actualmente en el dispositivo.
Swift
let msalParameters = MSALParameters()
msalParameters.completionBlockQueue = DispatchQueue.main
application.getCurrentAccount(with: msalParameters, completionBlock: { (currentAccount, previousAccount, error) in
// currentAccount is the currently signed in account
// previousAccount is the previously signed in account if any
})
Objective-C
MSALParameters *parameters = [MSALParameters new];
parameters.completionBlockQueue = dispatch_get_main_queue();
[application getCurrentAccountWithParameters:parameters
completionBlock:^(MSALAccount * _Nullable account, MSALAccount * _Nullable previousAccount, NSError * _Nullable error)
{
// currentAccount is the currently signed in account
// previousAccount is the previously signed in account if any
}];
Inicio de sesión de un usuario de forma global
Cuando un dispositivo está configurado como un dispositivo compartido, la aplicación puede llamar a la acquireTokenWithParameters:completionBlock: API para iniciar sesión en la cuenta. La cuenta estará disponible globalmente para todas las aplicaciones aptas en el dispositivo después de que la primera aplicación inicie sesión en la cuenta.
Objective-C
MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"api://myapi/scope"] webviewParameters:[self msalTestWebViewParameters]];
parameters.loginHint = self.loginHintTextField.text;
[application acquireTokenWithParameters:parameters completionBlock:completionBlock];
Cierre de sesión de un usuario de forma global
El código siguiente quita la cuenta de inicio de sesión y borra los tokens almacenados en caché de no solo la aplicación, sino también del dispositivo que está en modo de dispositivo compartido. Sin embargo, no borra los datos de la aplicación. Debe borrar los datos de la aplicación y borrar los datos almacenados en caché que la aplicación pueda mostrar al usuario.
Swift
let account = .... /* account retrieved above */
let signoutParameters = MSALSignoutParameters(webviewParameters: self.webViewParamaters!)
signoutParameters.signoutFromBrowser = true // To trigger a browser signout in Safari.
application.signout(with: account, signoutParameters: signoutParameters, completionBlock: {(success, error) in
if let error = error {
// Signout failed
return
}
// Sign out completed successfully
})
Objective-C
MSALAccount *account = ... /* account retrieved above */;
MSALSignoutParameters *signoutParameters = [[MSALSignoutParameters alloc] initWithWebviewParameters:webViewParameters];
signoutParameters.signoutFromBrowser = YES; // To trigger a browser signout in Safari.
[application signoutWithAccount:account signoutParameters:signoutParameters completionBlock:^(BOOL success, NSError * _Nullable error)
{
if (!success)
{
// Signout failed
return;
}
// Sign out completed successfully
}];
El complemento Microsoft Enterprise SSO para dispositivos Apple borra solo el estado de las aplicaciones. No borra el estado en el explorador Safari. Puede utilizar la propiedad opcional signoutFromBrowser que se muestra en los fragmentos de código para provocar un cierre de sesión en el navegador en Safari. Esto hace que el explorador se inicie brevemente en el dispositivo.
Recepción de transmisión para detectar el cierre de sesión global iniciado por otras aplicaciones
Para recibir la difusión de cambio de cuenta, debes registrar un receptor de difusión. 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.
NSString *const MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";
- (void) registerDarwinNotificationListener
{
CFNotificationCenterRef center =
CFNotificationCenterGetDarwinNotifyCenter();
CFNotificationCenterAddObserver(center, nil,
sharedModeAccountChangedCallback,
(CFStringRef)MSAL_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY,
nil, CFNotificationSuspensionBehaviorDeliverImmediately);
}
// CFNotificationCallbacks used specifically for Darwin notifications leave userInfo unused
void sharedModeAccountChangedCallback(CFNotificationCenterRef center, void * observer, CFStringRef name, void const * object, __unused CFDictionaryRef userInfo)
{
// Invoke account cleanup logic here
}
Para obtener más información sobre las opciones disponibles para CFNotificationAddObserver o para ver las firmas de método correspondientes en Swift, consulte:
Para iOS, la aplicación requiere un permiso en segundo plano para permanecer activo en segundo plano y escuchar las notificaciones de Darwin. La funcionalidad en segundo plano debe agregarse para admitir una operación en segundo plano diferente: la aplicación puede estar sujeta a rechazo de Apple App Store si tiene una funcionalidad en segundo plano solo para escuchar las notificaciones de Darwin. Si la aplicación ya está configurada para completar las operaciones en segundo plano, puede agregar el agente de escucha como parte de esa operación. Para obtener más información sobre las funcionalidades en segundo plano de iOS, consulte Configuración de modos de ejecución en segundo plano.
Microsoft aplicaciones que admiten el modo de dispositivo compartido
Estas aplicaciones de Microsoft admiten el modo de dispositivo compartido de Microsoft Entra:
- Equipos de Microsoft
- Microsoft Viva Engage (anteriormente Yammer)
- Microsoft Outlook
- Microsoft Power Apps
- Microsoft Power BI Mobile
- Microsoft Edge
- Microsoft Word
- Microsoft Excel
- Microsoft PowerPoint
Importante
La versión preliminar pública se proporciona sin un contrato de nivel de servicio y no se recomienda para cargas de trabajo de producción. Es posible que algunas características no sean compatibles o tengan funcionalidades restringidas. Para obtener más información, consulte Términos de licencia universal para Online Services.
MDM de terceros que admiten el modo de dispositivo compartido
Estos proveedores externos de administración de dispositivos móviles (MDM) admiten el modo de dispositivo compartido de Microsoft Entra:
Pasos siguientes
Para ver el modo de dispositivo compartido en acción, el ejemplo de código siguiente en GitHub incluye un ejemplo de ejecución de una aplicación de trabajo de primera línea en un dispositivo iOS en modo de dispositivo compartido: