Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans ce tutoriel, vous allez apprendre à modifier une application iOS ou iPadOS pour prendre en charge le mode SDM (Shared Device Mode). SDM est une fonctionnalité Microsoft Entra ID permettant aux organisations de configurer un appareil iOS, iPadOS ou Android pour faciliter le partage entre plusieurs employés, une pratique courante dans les paramètres de travail de première ligne.
Dans ce tutoriel, vous allez :
- Ajoutez la prise en charge du mode compte unique.
- Configurez votre application pour utiliser SDM.
- Détecter le mode de périphérique partagé.
- Identifiez si l’utilisateur connecté a changé.
Prerequisites
- tutoriel : Connecter des utilisateurs et appeler Microsoft Graph à partir d’une application iOS ou macOS
Détecter le mode appareil partagé
La détection du mode d’appareil partagé est importante pour votre application. De nombreuses applications nécessitent un changement dans leur expérience utilisateur (UX) lorsque l’application est utilisée sur un appareil partagé. Par exemple, votre application peut avoir une fonctionnalité « Inscription », qui n’est pas appropriée pour un travailleur de première ligne, car elle a probablement déjà un compte. Vous pouvez également ajouter une sécurité supplémentaire à la gestion des données de votre application si elle est en mode appareil partagé.
Utilisez l’API getDeviceInformationWithParameters:completionBlock: dans MSALPublicClientApplication pour déterminer si une application s’exécute sur un appareil en mode d’appareil partagé.
Les extraits de code suivants montrent 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é détermine l’état de l’utilisateur sur l’appareil et l’effacement des données d’application si un utilisateur a changé ou s’il n’y a pas d’utilisateur du tout sur l’appareil. Vous êtes responsable de la vérification que les données ne sont 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
Lorsqu’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 globalement pour toutes les applications éligibles sur l’appareil une fois que la première application se connecte au 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 non seulement 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 et effacer toutes les données mises 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 module externe Microsoft Enterprise SSO pour les appareils Apple efface uniquement l’état des applications. Il n’efface pas l’état du navigateur Safari. Vous pouvez utiliser la propriété facultative signoutFromBrowser affichée dans les extraits de code pour déclencher une déconnexion du navigateur dans Safari. Cela entraîne le lancement bref du navigateur 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. Lorsque qu’une notification de changement de compte est reçue, récupérez immédiatement l’utilisateur connecté et vérifiez si l’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 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
}
Pour plus d’informations sur les options disponibles pour CFNotificationAddObserver ou pour afficher les signatures de méthodes correspondantes en Swift, consultez :
Pour iOS, votre application nécessite une autorisation en arrière-plan pour rester active en arrière-plan et écouter les notifications Darwin. La fonctionnalité en arrière-plan doit être ajoutée pour prendre en charge une autre opération en arrière-plan : votre application peut être soumise à un rejet de l’Apple App Store s’il dispose d’une fonctionnalité en 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 iOS, consultez Configuration des modes d’exécution en arrière-plan
Microsoft applications qui prennent en charge le mode d’appareil partagé
Ces applications Microsoft prennent en charge Microsoft Entra mode d’appareil partagé :
- Microsoft Teams
- Microsoft Viva Engage (précédemment Yammer)
- Microsoft Outlook
- Microsoft Power Apps
- Microsoft Power BI Mobile
- Microsoft Edge
- Microsoft Word
- Microsoft Excel
- Microsoft PowerPoint
Important
La préversion publique est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent ne pas être prises en charge ou avoir des fonctionnalités limitées. Pour plus d’informations, consultez Conditions du contrat de licence universel pour les services en ligne.
MdMs tiers qui prennent en charge le mode d’appareil partagé
Ces fournisseurs de Gestion des appareils mobiles tiers prennent en charge Microsoft Entra mode d’appareil partagé :
Étapes suivantes
Pour afficher le mode appareil partagé en action, l’exemple de code suivant sur GitHub inclut un exemple d’exécution d’une application worker de première ligne sur un appareil iOS en mode appareil partagé :