Mode d’appareil partagé pour les appareils iOS

Important

Cette fonctionnalité est en version préliminaire publique. Cette préversion est fournie sans contrat de niveau de service et elle n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.

Les employés de terrain, comme les représentants, les membres d’équipage et les techniciens d’intervention, utilisent souvent un appareil mobile partagé pour effectuer leur travail. Ces appareils partagés peuvent présenter des risques de sécurité si vos utilisateurs partagent leur mot de passe ou leurs codes secrets, intentionnellement ou non, pour accéder aux données client et métier sur l’appareil partagé.

Le mode Appareil partagé vous permet de configurer un appareil iOS 13 ou ultérieur pour qu’il soit partagé plus facilement et en toute sécurité par les employés. Les employés peuvent se connecter et accéder rapidement aux informations client. Quand ils ont terminé leur journée ou leur tâche, ils peuvent se déconnecter de l’appareil et ce dernier est immédiatement prêt pour être utilisé par l’employé suivant.

Le mode Appareil partagé permet également de gérer l’appareil à l’aide des identités Microsoft.

Cette fonctionnalité utilise l’application Microsoft Authenticator pour gérer les utilisateurs sur l’appareil et distribuer le plug-in Microsoft Enterprise Single Sign-On pour les appareils Apple.

Créer une application en mode Appareil partagé

Pour créer une application en mode d’appareil partagé, les développeurs et les administrateurs d’appareils cloud travaillent ensemble :

  1. Les Développeurs d’applications écrivent une application monocompte (les applications multicomptes ne sont pas prises en charge en mode Appareil partagé) et du code pour traiter des opérations comme la déconnexion des appareils partagés.

  2. Les Administrateurs d’appareils préparent l’appareil pour qu’il soit partagé à l’aide d’un fournisseur de gestion des périphériques mobiles (GPM) tel que Microsoft Intune pour gérer les appareils de leur organisation. Le GPM envoie (push) l’application Microsoft Authenticator sur les appareils et active le « mode partagé » pour chaque appareil via une mise à jour de profil sur l’appareil. Ce paramètre Mode partagé est ce qui modifie le comportement des applications prises en charge sur l’appareil. Cette configuration à partir du fournisseur GPM définit le mode Appareil partagé pour l’appareil et active le plug-in Microsoft Enterprise Single Sign-On pour les appareils Apple, qui est requis pour le mode Appareil partagé.

  3. [Requis en Préversion publique uniquement] Un utilisateur doté du rôle Administrateur d’appareil cloud doit alors lancer l’application Microsoft Authenticator et joindre son appareil à l’organisation.

    Pour configurer l’appartenance de vos rôles organisationnels dans le Portail Azure : Azure Active Directory>Rôles et administrateurs>Administrateur d’appareil cloud

Les sections suivantes vous aident à mettre à jour votre application pour prendre en charge le mode Appareil partagé.

Utiliser Intune pour activer le mode d’appareil partagé et l’extension SSO

Notes

L’étape suivante est requise uniquement dans la préversion publique.

Votre appareil doit être configuré pour prendre en charge le mode Appareil partagé. La version 13 ou ultérieure d’iOS doit être installée et inscrite sur GPM. La configuration GPM doit également activer le plug-in Microsoft Enterprise Single Sign-On pour les appareils Apple. Pour en savoir plus sur les extensions SSO, regardez la vidéo Apple.

  1. Dans le portail de configuration Intune, indiquez à l’appareil d’activer le plug-in Microsoft Enterprise Single Sign-On pour les appareils Apple avec la configuration suivante :

    • Type : Rediriger
    • ID d’extension : com.microsoft.azureauthenticator.ssoextension
    • ID d’équipe : (ce champ n’est pas nécessaire pour iOS)
    • URL :
      • https://login.microsoftonline.com
      • https://login.microsoft.com
      • https://sts.windows.net
      • https://login.partner.microsoftonline.cn
      • https://login.chinacloudapi.cn
      • https://login.microsoftonline.de
      • https://login.microsoftonline.us
      • https://login.usgovcloudapi.net
      • https://login-us.microsoftonline.com
    • Données supplémentaires à configurer :
      • Clé : sharedDeviceMode
      • Tapez : Boolean
      • Valeur : true

    Pour plus d’informations sur la configuration avec Intune, consultez la documentation sur la configuration d’Intune.

  2. Ensuite, configurez votre GPM pour envoyer (push) l’application Microsoft Authenticator à votre appareil via un profil GPM.

    Définissez les options de configuration suivantes pour activer le mode Appareil partagé :

    • Configuration 1 :
      • Clé : sharedDeviceMode
      • Tapez : Boolean
      • Valeur : true

Modifier votre application iOS pour prendre en charge le mode Appareil partagé

Vos utilisateurs dépendent de vous et vous devez leur garantir que leurs données ne seront pas divulguées à un autre utilisateur. Les sections suivantes fournissent des signaux utiles pour indiquer à votre application qu’une modification a eu lieu et doit être traitée.

Il vous incombe de vérifier l’état de l’utilisateur sur l’appareil chaque fois que votre application est utilisée, puis d’effacer les données de l’utilisateur précédent. Cela inclut le rechargement en arrière-plan en mode multitâche.

En cas de changement d’utilisateur, vous devez vous assurer que les données de l’utilisateur précédent sont effacées et que toutes les données en cache affichées dans votre application sont supprimées. Nous vous recommandons vivement, à vous et à votre entreprise, de procéder à un examen de sécurité après avoir mis à jour votre application pour qu’elle prenne en charge le mode Appareil partagé.

Détecter le mode Appareil partagé

La détection du mode Appareil partagé est importante pour votre application. De nombreuses applications nécessitent une modification de leur expérience utilisateur (UX) quand l’application est utilisée sur un appareil partagé. Par exemple, votre application peut avoir une fonctionnalité « Inscription », ce qui n’est pas approprié pour un employé de terrain, car il a probablement déjà un compte. Vous pouvez également ajouter une sécurité supplémentaire au traitement des données de votre application si celle-ci est en mode Appareil partagé.

Utilisez l’API getDeviceInformationWithParameters:completionBlock: dans MSALPublicClientApplication pour déterminer si une application est en cours d’exécution sur un appareil en mode Appareil partagé.

Les extraits de code suivants présentent des exemples d’utilisation de l’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
}];

Obtenir l’utilisateur connecté et déterminer si l’utilisateur de l’appareil a changé

Une autre partie importante de la prise en charge du mode Appareil partagé consiste à déterminer l’état de l’utilisateur sur l’appareil et à effacer les données d’application si l’utilisateur de l’appareil a changé ou si aucun utilisateur n’est enregistré sur l’appareil. Il vous incombe de veiller à ce que les données ne soient pas divulguées à un autre utilisateur.

Vous pouvez utiliser l’API getCurrentAccountWithParameters:completionBlock: pour interroger le compte actuellement connecté sur l’appareil.

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

Connecter globalement un utilisateur

Quand un appareil est configuré en tant qu’appareil partagé, votre application peut appeler l’API acquireTokenWithParameters:completionBlock: pour se connecter au compte. Le compte sera disponible dans le monde entier pour toutes les applications admissibles sur l’appareil après la première connexion de l’application sur le compte.

Objective-C

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

parameters.loginHint = self.loginHintTextField.text;

[application acquireTokenWithParameters:parameters completionBlock:completionBlock];

Déconnecter globalement un utilisateur

Le code suivant supprime le compte connecté et efface les jetons mis en cache de l’application, mais également de l’appareil en mode Appareil partagé. Toutefois, il n’efface pas les données de votre application. Vous devez effacer les données de votre application, ainsi que toutes les données en cache que votre application peut afficher à l’utilisateur.

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

}];

Le plug-in Microsoft Enterprise Single Sign-On pour les appareils Apple efface l’état des applications uniquement. Il n’efface pas l’état du navigateur Safari. Vous pouvez utiliser la propriété facultative signoutFromBrowser indiquée dans les extraits de code ci-dessus pour déclencher une déconnexion de navigateur dans Safari. Le navigateur est alors lancé brièvement sur l’appareil.

Recevoir une diffusion pour détecter la déconnexion globale lancée à partir d’autres applications

Pour recevoir la diffusion de modification de compte, vous devez inscrire un récepteur de diffusion. Lorsqu’une diffusion de modification de compte est reçue, obtenez immédiatement l’utilisateur connecté et déterminez si un utilisateur a changé sur l’appareil. Si une modification est détectée, lancez le nettoyage des données pour le compte précédemment connecté. Il est recommandé d’arrêter correctement toutes les opérations et d’effectuer un nettoyage des données.

L’extrait de code suivant montre comment inscrire un récepteur de diffusion.

NSString *const MSID_SHARED_MODE_CURRENT_ACCOUNT_CHANGED_NOTIFICATION_KEY = @"SHARED_MODE_CURRENT_ACCOUNT_CHANGED";

- (void) registerDarwinNotificationListener 

{ 

   CFNotificationCenterRef center =

   CFNotificationCenterGetDarwinNotifyCenter(); 

   CFNotificationCenterAddObserver(center, nil,

   sharedModeAccountChangedCallback,

   (CFStringRef)MSID_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 

} 

Pour plus d’informations sur les options disponibles pour CFNotificationAddObserver ou pour voir les signatures de méthode correspondantes dans Swift, consultez :

Pour iOS, votre application nécessite une autorisation d’arrière-plan pour rester active en arrière-plan et écouter les notifications Darwin. La fonctionnalité d’arrière-plan doit être ajoutée pour prendre en charge une opération en arrière-plan différente : votre application peut être soumise au rejet de l’App Store d’Apple si elle dispose d’une fonctionnalité d’arrière-plan uniquement pour écouter les notifications Darwin. Si votre application est déjà configurée pour effectuer des opérations en arrière-plan, vous pouvez ajouter l’écouteur dans le cadre de cette opération. Pour plus d’informations sur les fonctionnalités en arrière-plan d’iOS, consultez Configuration des modes d’exécution en arrière-plan

Étapes suivantes

Pour voir le mode Appareil partagé en action, l’exemple de code suivant sur GitHub fournit un exemple d’exécution d’une application d’employés de terrain sur un appareil iOS en mode Appareil partagé :

Exemple d’API Microsoft Graph MSAL iOS Swift