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

Questa esercitazione illustra come modificare un'applicazione iOS o iPadOS per supportare la modalità dispositivo condiviso (SDM). SDM è una funzionalità di Microsoft Entra ID che consente alle organizzazioni di configurare un dispositivo iOS, iPadOS o Android per facilitare la condivisione tra più dipendenti, una pratica comune nelle impostazioni di lavoro sul campo.

In questa esercitazione, imparerai a:

  • Aggiungere il supporto per la modalità account singolo.
  • Configurare l'app per l'uso di SDM.
  • Rileva la modalità dispositivo condivisa.
  • Identificare se l'utente connesso è stato modificato.

Prerequisiti

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à di "Registrazione", che non è appropriata per un lavoratore in prima linea perché probabilmente dispone già di 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 dispositivi Apple cancella lo stato solo per le applicazioni. Non cancella lo stato su Safari. È possibile usare la proprietà facoltativa signoutFromBrowser mostrata nei frammenti di codice per attivare la disconnessa del browser in Safari. Ciò fa sì che il browser si avvii brevemente sul dispositivo.

Ricevere la trasmissione per rilevare la disconnessione 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

Microsoft applicazioni che supportano la modalità dispositivo condiviso

Queste applicazioni Microsoft supportano Microsoft Entra modalità dispositivo condiviso:

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.

MDM di terze parti che supportano la modalità dispositivo condiviso

Questi provider di gestione dei dispositivi mobili (MDM) di terze parti supportano la modalità dispositivo condiviso di Microsoft Entra:

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 Microsoft API Graph per MSAL iOS Swift