Modalità dispositivo condiviso per dispositivi iOS

I lavoratori sul campo, ad esempio i collaboratori al dettaglio, i membri dell'equipaggio di volo e assistenza sul campo lavoratori usano spesso un dispositivo mobile condiviso per svolgere il proprio lavoro. Questi dispositivi condivisi possono presentare rischi per la sicurezza se gli utenti condividono password o PIN, intenzionalmente o no, per accedere ai dati aziendali e dei clienti nel dispositivo condiviso.

La modalità dispositivo condiviso consente di configurare un dispositivo iOS 14 o versione successiva in modo che sia più semplice e sicuro condiviso dai dipendenti. I dipendenti possono accedere una sola volta e ottenere l'accesso Single Sign-On (SSO) a tutte le app che supportano questa funzionalità, consentendo loro di accedere più rapidamente alle informazioni. Al termine del turno o dell'attività, possono disconnettersi dal dispositivo tramite qualsiasi app supportata che li disconnette anche da tutte le app che supportano questa funzionalità e il dispositivo è immediatamente pronto per l'uso da parte del dipendente successivo senza accesso ai dati dell'utente precedente.

Per sfruttare i vantaggi della funzionalità modalità dispositivo condiviso, gli sviluppatori di app e gli amministratori di dispositivi cloud interagiscono:

  1. Gli amministratori dei dispositivi preparano il dispositivo per la condivisione usando un provider di gestione di dispositivi mobili (MDM) come Microsoft Intune. Mdm esegue il push dell'app Microsoft Authenticator nei dispositivi e attiva "Modalità condivisa" per ogni dispositivo tramite un aggiornamento del profilo al dispositivo. Questa impostazione modalità condivisa consente di modificare il comportamento delle app supportate nel dispositivo. Questa configurazione del provider MDM imposta la modalità dispositivo condiviso per il dispositivo e abilita il plug-in Microsoft Enterprise SSO per i dispositivi Apple necessari per la modalità dispositivo condiviso. Per altre informazioni sulle estensioni SSO, vedere il video di Apple.

  2. Gli sviluppatori di applicazioni scrivono un'app con account singolo (le app con più account non sono supportate in modalità dispositivo condiviso) per gestire lo scenario seguente:

    • Accedere a un utente a livello di dispositivo tramite qualsiasi applicazione supportata.
    • Disconnettere un utente a livello di dispositivo tramite qualsiasi applicazione supportata.
    • Eseguire una query sullo stato del dispositivo per determinare se l'applicazione si trova in un dispositivo in modalità dispositivo condiviso.
    • Eseguire una query sullo stato del dispositivo dell'utente nel dispositivo per determinare se qualcosa è cambiato dall'ultima volta in cui è stata usata l'applicazione.

    Il supporto della modalità dispositivo condiviso deve essere considerato un aggiornamento delle funzionalità per l'applicazione e può contribuire ad aumentare l'adozione in ambienti in cui lo stesso dispositivo viene usato tra più utenti.

    Importante

    Le applicazioni Microsoft che supportano la modalità dispositivo condiviso in iOS non richiedono alcuna modifica e devono essere installate solo nel dispositivo per ottenere i vantaggi offerti dalla modalità dispositivo condiviso.

Configurare il dispositivo in modalità dispositivo condiviso

Il dispositivo deve essere configurato per supportare la modalità dispositivo condiviso. Deve avere installato iOS 14+ ed essere registrato con MDM. La configurazione MDM deve anche abilitare il plug-in Microsoft Enterprise SSO per i dispositivi Apple.

Microsoft Intune supporta il provisioning zero-touch per i dispositivi in modalità dispositivo condiviso Microsoft Entra, il che significa che il dispositivo può essere configurato e registrato in Intune con un'interazione minima dal ruolo di lavoro sul campo. Per configurare il dispositivo in modalità dispositivo condiviso quando si usa Microsoft Intune come MDM, vedere Configurare la registrazione per i dispositivi in modalità dispositivo condiviso Di Microsoft Entra.

Importante

Microsoft sta lavorando con mdm di terze parti per supportare la modalità dispositivo condiviso. L'elenco degli MDM di terze parti verrà aggiornato man mano che iniziano a supportare la modalità dispositivo condiviso.

Modificare l'applicazione iOS per supportare la modalità dispositivo condiviso

Gli utenti dipendono dall'utente per assicurarsi che i dati non vengano persi a un altro utente. Le sezioni seguenti forniscono segnali utili per indicare all'applicazione che si è verificata una modifica e che deve essere gestita.

L'utente è responsabile del controllo dello stato dell'utente nel dispositivo ogni volta che viene usata l'app e quindi cancellare i dati dell'utente precedente. Ciò include se viene ricaricato in background in più attività.

In caso di modifica dell'utente, è necessario assicurarsi che i dati dell'utente precedente vengano cancellati e che tutti i dati memorizzati nella cache visualizzati nell'applicazione vengano rimossi. Ti consigliamo vivamente di eseguire un processo di revisione della sicurezza dopo l'aggiornamento dell'app per supportare la modalità dispositivo condiviso.

Rilevare la modalità dispositivo condiviso

Il rilevamento della modalità dispositivo condiviso è importante per l'applicazione. Molte applicazioni richiedono una modifica dell'esperienza utente quando l'applicazione viene usata in un dispositivo condiviso. Ad esempio, l'applicazione potrebbe avere una funzionalità "Iscrizione", che non è appropriata per un ruolo di lavoro sul campo perché probabilmente ha già un account. È anche possibile aggiungere sicurezza aggiuntiva alla gestione dei dati dell'applicazione se è in modalità dispositivo condiviso.

Usare l'API getDeviceInformationWithParameters:completionBlock: in MSALPublicClientApplication per determinare se un'app è in esecuzione in un dispositivo in modalità dispositivo condiviso.

I frammenti di codice seguenti mostrano esempi di uso dell'API getDeviceInformationWithParameters:completionBlock: .

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

Ottenere l'utente connesso e determinare se un utente è stato modificato nel dispositivo

Un'altra parte importante del supporto della modalità dispositivo condiviso è determinare lo stato dell'utente nel dispositivo e cancellare i dati dell'applicazione se un utente è stato modificato o se non è presente alcun utente nel dispositivo. L'utente è responsabile di garantire che i dati non vengano persi a un altro utente.

È possibile usare l'API getCurrentAccountWithParameters:completionBlock: per eseguire query sull'account attualmente connesso nel 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
}];

Connettere un utente a livello globale

Quando un dispositivo è configurato come dispositivo condiviso, l'applicazione può chiamare l'API acquireTokenWithParameters:completionBlock: per accedere all'account. L'account sarà disponibile a livello globale per tutte le app idonee nel dispositivo dopo l'accesso della prima app all'account.

Objective-C

MSALInteractiveTokenParameters *parameters = [[MSALInteractiveTokenParameters alloc] initWithScopes:@[@"api://myapi/scope"] webviewParameters:[self msalTestWebViewParameters]];

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Disconnettere un utente a livello globale

Il codice seguente rimuove l'account connesso e cancella i token memorizzati nella cache non solo dall'app, ma anche dal dispositivo in modalità dispositivo condiviso. Tuttavia, non cancella i dati dall'applicazione. È necessario cancellare i dati dall'applicazione e cancellare i dati memorizzati nella cache che l'applicazione potrebbe visualizzare all'utente.

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

}];

Il plug-in Microsoft Enterprise SSO per i dispositivi Apple cancella lo stato solo per le applicazioni. Non cancella lo stato nel browser Safari. È possibile usare la proprietà facoltativa signoutFromBrowser mostrata nei frammenti di codice per attivare una disconnessa del browser in Safari. In questo modo il browser viene avviato brevemente nel dispositivo.

Ricevere la trasmissione per rilevare la disconnessa globale avviata da altre applicazioni

Per ricevere la trasmissione delle modifiche dell'account, è necessario registrare un ricevitore di trasmissione. Quando viene ricevuta una trasmissione di modifiche dell'account, ottenere immediatamente l'utente connesso e determinare se un utente è cambiato nel dispositivo. Se viene rilevata una modifica, avviare la pulizia dei dati per l'account connesso in precedenza. È consigliabile arrestare correttamente le operazioni ed eseguire la pulizia dei dati.

Il frammento di codice seguente mostra come registrare un ricevitore di trasmissione.

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 

} 

Per altre informazioni sulle opzioni disponibili per CFNotificationAddObserver o per visualizzare le firme dei metodi corrispondenti in Swift, vedere:

Per iOS, l'app richiede un'autorizzazione in background per rimanere attiva in background e ascoltare le notifiche di Darwin. La funzionalità in background deve essere aggiunta per supportare un'operazione in background diversa: l'app potrebbe essere soggetta a rifiuto da Apple App Store se ha una funzionalità in background solo per ascoltare le notifiche di Darwin. Se l'app è già configurata per completare le operazioni in background, è possibile aggiungere il listener come parte di tale operazione. Per altre informazioni sulle funzionalità in background di iOS, vedere Configurazione delle modalità di esecuzione in background

Applicazioni Microsoft che supportano la modalità dispositivo condiviso

Queste applicazioni Microsoft supportano la modalità dispositivo condiviso Microsoft Entra:

Importante

L'anteprima pubblica viene fornita senza un contratto di servizio e non è consigliata per i carichi di lavoro di produzione. Alcune funzionalità potrebbero non essere supportate o avere funzionalità vincolate. Per altre informazioni, vedere Condizioni di licenza universali per i servizi online.

Passaggi successivi

Per visualizzare la modalità dispositivo condiviso in azione, l'esempio di codice seguente in GitHub include un esempio di esecuzione di un'app di lavoro sul campo in un dispositivo iOS in modalità dispositivo condiviso:

Esempio di API Microsoft Graph per MSAL iOS Swift