Kit de développement logiciel (SDK) d’application Intune pour Android - Fonctionnalités de participation à l’application

Le SDK d’application Microsoft Intune pour Android vous permet d’incorporer des stratégies de protection des applications Intune (également appelées stratégies MAM) dans votre application Android Java/Kotlin native. Une application gérée par Intune est intégrée au SDK Intune App. Intune administrateurs peuvent facilement déployer des stratégies de protection des applications sur votre application gérée par Intune lorsque Intune gère activement l’application.

Remarque

Ce guide est divisé en plusieurs étapes distinctes. Commencez par passer en revue Planifiez l’intégration.

Étape 7 : fonctionnalités de participation de l’application

Objectifs de la scène

  • Découvrez les fonctionnalités de participation des applications offertes par le SDK d’application Intune.
  • Intégrez les fonctionnalités de participation de l’application pertinentes pour votre application et vos utilisateurs.
  • Testez l’intégration de ces fonctionnalités.

Que sont les « fonctionnalités de participation d’application » ?

Ce processus d’intégration SDK tente de minimiser la quantité de code spécifique à l’application que les développeurs doivent écrire. En effectuant correctement les étapes précédentes de l’intégration du Kit de développement logiciel (SDK), votre application applique désormais la plupart des paramètres de stratégie de protection des applications, tels que le chiffrement de fichier, les restrictions de copier/coller, le blocage des captures d’écran et les restrictions de transfert de données.

Toutefois, certains paramètres nécessitent du code spécifique à l’application pour s’appliquer correctement ; Ces paramètres sont appelés fonctionnalités de participation d’application. En règle générale, le SDK n’a pas suffisamment de contexte sur le code de votre application ou le scénario de l’utilisateur final pour appliquer automatiquement ces paramètres. Par conséquent, les développeurs appellent les API du SDK de manière appropriée.

Les fonctionnalités de participation des applications ne sont pas nécessairement facultatives. En fonction des fonctionnalités existantes de votre application, ces fonctionnalités peuvent être nécessaires. Pour plus d’informations, consultez Décisions clés pour l’intégration du SDK .

Les étapes précédentes de ce guide décrivent déjà plusieurs fonctionnalités de participation d’application :

Le reste de ce guide décrit le reste des fonctionnalités de participation d’application :

  • Appliquer une stratégie limitant l’enregistrement de fichiers ou l’ouverture de fichiers à partir d’un stockage local ou cloud.
  • Appliquer une stratégie de restriction du contenu dans les notifications.
  • Appliquer la stratégie de protection des données de sauvegarde.
  • Appliquer la stratégie de restriction de capture d’écran (si votre application a un code de capture d’écran personnalisé).
  • Support de l’autorité de certification Protection des applications.
  • Inscrivez-vous pour recevoir des notifications à partir du SDK.
  • Appliquez des thèmes d’application personnalisés.
  • Utilisez des certificats approuvés d’Intune, ce qui garantit la chaîne de confiance vers les points de terminaison locaux.

Concepts de base des fonctionnalités de participation à l’application

L’interface AppPolicy contient de nombreuses méthodes qui informent votre application si certaines actions sont autorisées.

La plupart des fonctionnalités de participation de l’application impliquent :

  • Identifier le bon endroit dans le code de l’application pour case activée si une action est autorisée.
  • Appel d’une AppPolicy méthode pour case activée si une action est autorisée, en fonction de la stratégie actuellement configurée.
  • En fonction du résultat, autoriser l’action à se terminer ou modifier le comportement de l’application lorsque l’action est bloquée.

Pour récupérer une AppPolicy instance, utilisez l’une des méthodes MAMPolicyManager, telle que getPolicy(final Context context) ou getPolicyForIdentityOID(final String oid).

Méthodes d’information dans AppPolicy

Toutes les méthodes ne AppPolicy sont pas liées à une fonctionnalité de participation d’application. Certaines méthodes sont informatives et fournissent à votre application des données sur les stratégies actuellement configurées, même si ces stratégies sont automatiquement appliquées par le Kit de développement logiciel (SDK). Ces méthodes permettent de donner à votre application la possibilité de présenter des expériences utilisateur personnalisées lorsque des stratégies spécifiques sont configurées.

Exemple : déterminer si les captures d’écran sont bloquées

Si l’application possède un contrôle qui permet à l’utilisateur de prendre une capture d’écran, envisagez de désactiver ou de masquer ce contrôle si la stratégie de protection de l’application bloque les captures d’écran.

L’application peut vérifier la case activée en appelant MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Stratégie de limitation du transfert de données entre les applications et les emplacements de stockage d’appareil ou dans le cloud

De nombreuses applications permettent à l’utilisateur final d’enregistrer des données ou d’ouvrir des données à partir de services de stockage de fichiers locaux ou cloud. Le Kit de développement logiciel (SDK) d’application Intune permet aux administrateurs informatiques de se protéger contre les entrées et les fuites de données en limitant les endroits où les applications peuvent enregistrer et ouvrir des données.

Remarque

Si votre application permet d’enregistrer à des emplacements personnels ou cloud directement à partir de l’application ou permet d’ouvrir des données directement dans l’application, vous devez implémenter cette fonctionnalité de participation de l’application Intune SDK d’application** pour permettre aux administrateurs informatiques de bloquer cet enregistrement et cette ouverture.

Enregistrement sur l’appareil ou dans le stockage cloud

L’API getIsSaveToLocationAllowedForOID permet à l’application de savoir si l’enregistrement dans certains emplacements est autorisé pour une identité donnée, en fonction de la stratégie configurée :

MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);

Pour déterminer si l’application doit implémenter la getIsSaveToLocationAllowedForOID case activée, déterminez si l’application prend en charge la sortie de données en consultant le tableau suivant :

service Paramètre : SaveLocation valeur d’énumération Cas d’usage OID associé
ONEDRIVE L’application enregistre des données sur OneDrive. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
SHAREPOINT L’application enregistre des données dans SharePoint. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
BOX L’application enregistre les données dans Box. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
LOCAL L’application enregistre les données dans un emplacement de stockage externe sur l’appareil qui n’est pas le stockage privé de l’application. Cet emplacement de stockage n’est pas considéré comme un service cloud et doit toujours être utilisé avec un paramètre OID null .
PHOTO_LIBRARY L’application enregistre des données sur le stockage de photos local Android. Le stockage de photos local n’est pas considéré comme un service cloud et doit toujours être utilisé avec un null paramètre OID.
IMANAGE L’application enregistre des données dans iManage. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
EGNYTE L’application enregistre les données dans Egnyte. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
ACCOUNT_DOCUMENT L’application enregistre des données à un emplacement associé à un compte dans l’application et n’est pas l’un des emplacements cloud spécifiques dans ce tableau.

Utilisez cet emplacement pour déterminer si des données peuvent être transmises entre des comptes au sein d’une application multi-identités.
OID d’un compte utilisé pour l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
OTHER L’application enregistre des données à un emplacement non spécifié dans ce tableau et qui ne répond pas aux critères de ACCOUNT_DOCUMENT. Le oid n’est pas évalué pour cet emplacement et devrait l’être null.

Les Files placés dans le stockage d’application privé qui sont nécessaires au fonctionnement de l’application ou téléchargés temporairement pour l’affichage sont toujours autorisés ; pas besoin de vérifier la case activéegetIsSaveToLocationAllowedForOID. Vérifier la case activée SaveLocation.LOCAL

  1. Files enregistrés en dehors du stockage privé de l’application.
  2. Files téléchargés dans un stockage d’application privé qui ne sont pas nécessaires au fonctionnement de l’application (par exemple, lorsque l’utilisateur choisit explicitement de télécharger sur l’appareil).

Remarque

Lors de la vérification de la stratégie d’enregistrement, oid doit être l’OID du compte associé au service cloud enregistré (ce compte n’est pas nécessairement le même que le compte propriétaire du document enregistré).

Ouverture de données à partir d’un emplacement de stockage local ou cloud

L’API getIsOpenFromLocationAllowedForOID permet à l’application de savoir si l’ouverture à partir de certains emplacements est autorisée pour une identité donnée, en fonction de la stratégie configurée :

MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);

Pour déterminer si l’application doit implémenter la getIsOpenFromLocationAllowedForOID case activée, vérifiez si l’application prend en charge l’entrée de données en consultant le tableau suivant :

location Paramètre : OpenLocation valeur d’énumération Cas d’usage OID associé
ONEDRIVE_FOR_BUSINESS L’application ouvre des données à partir de OneDrive. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
SHAREPOINT L’application ouvre des données à partir de SharePoint. OID d’un compte utilisé pour l’authentification du service cloud et l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
CAMERA L’application ouvre des données à partir de l’appareil photo de l’appareil. Une null valeur, car l’appareil photo de l’appareil n’est pas un service cloud.
LOCAL L’application ouvre des données à partir d’un emplacement de stockage externe sur l’appareil qui n’est pas le stockage privé de l’application. Bien que le stockage externe ne soit pas un service cloud, un oid paramètre est attendu, car il indique la propriété.

* Pour les fichiers avec identification :oid doit être l’identité du propriétaire du fichier.
* Pour les fichiers sans balise d’identité :oid devrait être null.
PHOTO_LIBRARY L’application ouvre des données à partir du stockage de photos local Android. Le stockage de photos local n’est pas considéré comme un service cloud et doit toujours être utilisé avec un null paramètre OID.
ACCOUNT_DOCUMENT L’application ouvre des données à partir d’un emplacement associé à un compte dans l’application et n’est pas l’un des emplacements cloud spécifiques dans ce tableau.

Utilisez cet emplacement pour déterminer si des données peuvent être transmises entre des comptes au sein d’une application multi-identités.
OID d’un compte utilisé pour l’authentification Microsoft Entra. Si ce compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
OTHER L’application ouvre des données à partir d’un emplacement non spécifié dans ce tableau et qui ne répond pas aux critères de ACCOUNT_DOCUMENT. Le oid n’est pas évalué pour cet emplacement et devrait l’être null.

Remarque

Lorsque vous cochez la case activée la stratégie d’ouverture, oid doit être l’OID du compte associé au fichier ou au service cloud ouvert (pas nécessairement le même que le compte qui ouvre le document).

Conseil

Pour des raisons pratiques, le SDK fournit la méthode AppPolicy.isOpenFromLocalStorageAllowed qui prend un File paramètre pour un fichier dans le stockage local. Pour l’application de la stratégie, cette méthode est fonctionnellement identique à l’appelAppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid), sauf qu’elle gère l’analyse oid du propriétaire du fichier à partir de .File

Partage de la boîte de dialogue bloquée

Le Kit de développement logiciel (SDK) propose une boîte de dialogue pour avertir l’utilisateur lorsqu’une stratégie GAM bloque une action de transfert de données.

La boîte de dialogue doit apparaître pour l’utilisateur chaque fois que l’appel d’API getIsSaveToLocationAllowedForOID ou getIsOpenFromLocationAllowedForOID entraîne le blocage de l’action d’enregistrement/d’ouverture. La boîte de dialogue affiche un message générique et revient à l’appel Activity lorsqu’elle est renvoyée.

Pour afficher la boîte de dialogue, ajoutez le code suivant :

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Autoriser le partage de fichiers

Si l’enregistrement dans des emplacements de stockage public n’est pas autorisé, votre application doit toujours permettre à l’utilisateur d’afficher des fichiers en les téléchargeant dans le stockage privé de l’application , puis en les ouvrant avec le sélecteur système.

Stratégie de restriction du contenu dans les notifications

Pour les applications à identité unique, le comportement par défaut du SDK d’application Intune tente de bloquer toutes les notifications lorsque la stratégie de protection des applications restreint les notifications.

Le comportement par défaut du Kit de développement logiciel (SDK) est limité. Le Kit de développement logiciel (SDK) ne peut pas honorer automatiquement la valeur « Bloquer les données organisationnelles », qui est destinée à supprimer uniquement le contenu géré des notifications. Pour les applications à identités multiples, le Kit de développement logiciel (SDK) ne peut pas déterminer les notifications qui contiennent du contenu géré.

Si votre application affiche des notifications et qu’elle est multi-identité et/ou qu’elle doit respecter la valeur « Bloquer les données de l’organisation », elle doit vérifier la stratégie de restriction de case activée pour le compte associé à la notification avant d’afficher la notification.

Pour déterminer si la stratégie est appliquée, effectuez l’appel suivant :

NotificationRestriction notificationRestriction =
    MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();

L’énumération renvoyée NotificationRestriction a les valeurs suivantes :

NotificationRestriction Énumération Comportement attendu de l’application
BLOCKED L’application ne doit afficher aucune notification pour le compte associé à cette stratégie. Pour les applications à identité unique, le SDK d’application Intune bloque automatiquement toutes les notifications et aucun code supplémentaire n’est requis.
BLOCK_ORG_DATA L’application doit afficher une notification modifiée qui ne contient pas de données d’organisation.
UNRESTRICTED L’application doit afficher toutes les notifications.

Si votre application n’appelle getNotificationRestrictionpas correctement , le SDK GAM fait de son mieux pour restreindre automatiquement les notifications aux applications à identité unique uniquement.

Dans ce cas, BLOCK_ORG_DATA est traitée de la même manière que BLOCKED et la notification ne s’affiche pas du tout.

Pour un contrôle plus précis, case activée la valeur des notifications d’application getNotificationRestriction et modifiez-les de manière appropriée.

Stratégie de protection des données de sauvegarde

Le Kit de développement logiciel (SDK) de l’application Intune peut bloquer le chargement de données vers la fonctionnalité de sauvegarde et de restauration intégrée d’Android. Pour plus d’informations sur la sauvegarde et la restauration dans Android, consultez le guide de l’API Android et les modifications introduites dans Android S/12 dans Change to backup and restore.

Sauvegarde automatique pour les applications

À partir d’Android M, Android fournit des sauvegardes complètes automatiques sur Google Drive pour les applications, quelle que soit l’API cible de l’application.

Intune vous permet d’utiliser toutes les fonctionnalités de sauvegarde automatique fournies par Android, y compris la possibilité de définir des règles personnalisées dans XML, avec des conseils d’intégration Intune spécifiques pour garantir que la protection des données s’applique.

Configuration du comportement de sauvegarde dans le manifeste de l’application

Par défaut, android:allowBackup est défini sur true comme indiqué dans Activer et désactiver la sauvegarde.

Si l’application ne nécessite pas de fonctionnalité de sauvegarde et de restauration complète, définissez la valeurandroid:allowBackup false. Dans ce cas, aucune action supplémentaire n’est nécessaire et les données d’entreprise restent dans l’application.

Si votre application nécessite une fonctionnalité complète de sauvegarde et de restauration, affectez android:allowBackup la valeur true et procédez comme suit :

  1. Si votre application n’utilise pas sa propre , BackupAgentutilisez le MAMBackupAgent par défaut pour activer les sauvegardes complètes automatiques qui sont conformes à la stratégie Intune. Placez les éléments suivants dans le manifeste de l’application :

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. Facultatif. Si vous implémentez un BackupAgent, vous devez utiliser MAMBackupAgent ou MAMBackupAgentHelper. Reportez-vous aux sections suivantes. Envisagez de passer à MAMDefaultBackupAgent d’Intune, décrit à l’étape 1, qui permet une sauvegarde facile sur Android M et versions ultérieures.

  3. Lorsque vous décidez du type de sauvegarde complète que votre application doit recevoir (non filtrée, filtrée ou aucune), définissez l’attribut android:fullBackupContent sur true, falseou sur une ressource XML dans votre application.

  4. Ensuite, vous devez copier la valeur for android:fullBackupContent dans la balise de com.microsoft.intune.mam.FullBackupContent métadonnées et, pour les applications qui prennent en charge le format de configuration XML ajouté dans l’API 31, dans la balise de com.microsoft.intune.mam.DataExtractionRules métadonnées.

    • Exemple 1 : Si vous souhaitez que votre application dispose de sauvegardes complètes sans exclusions, vous devez définir les attributs et les balises de métadonnées sur true :

      <application
        ...
        android:fullBackupContent="true"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
      
    • Exemple 2 : si vous souhaitez que votre application utilise ses sauvegardes automatiques personnalisées BackupAgent et non conformes aux règles de Intune, vous devez définir les attributs et les balises de métadonnées sur false :

      <application
        ...
        android:fullBackupContent="false"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
      
    • Exemple 3 : Si vous souhaitez que votre application dispose de sauvegardes complètes conformément à vos règles personnalisées définies dans un fichier XML, définissez l’attribut et la balise de métadonnées sur la même ressource XML :

      <application
        ...
        android:fullBackupContent="@xml/my_full_backup_content_scheme"
        android:dataExtractionRules="@xml/my_data_extraction_rules_scheme"
        ...>
      </application>
      ...
      <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" />
      <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
      

Sauvegarde de clé/valeur

L’option de sauvegarde clé/valeur est disponible pour toutes les API 8+ et charge les données d’application vers le service de sauvegarde Android. La quantité de données par application est limitée à 5 Mo. Si vous utilisez la sauvegarde de clé/valeur, vous devez utiliser un BackupAgentHelper ou un BackupAgent.

BackupAgentHelper

BackupAgentHelper est plus facile à implémenter que BackupAgent à la fois en termes de fonctionnalités Android natives et d’intégration d’Intune MAM. BackupAgentHelper permet au développeur d’enregistrer des fichiers entiers et des préférences partagées dans un FileBackupHelper et SharedPreferencesBackupHelper (respectivement) qui sont ensuite ajoutés à BackupAgentHelper lors de la création. Procédez comme suit pour utiliser un BackupAgentHelper avec la gestion des applications mobiles (MAM) Intune :

  1. Pour utiliser la sauvegarde multi-identité avec un BackupAgentHelper, suivez le guide Android pour étendre BackupAgentHelper.

  2. Demandez à votre classe d’étendre l’équivalent MAM de BackupAgentHelper, FileBackupHelper et SharedPreferencesBackupHelper.

Classe Android Équivalent MAM
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Le respect de ces directives vous permet d’effectuer avec succès une sauvegarde et une restauration multi-identités.

Agent de sauvegarde

Un BackupAgent vous permet d’être beaucoup plus explicite sur les données sauvegardées. Étant donné que le développeur est responsable de l’implémentation, des étapes supplémentaires sont nécessaires pour garantir une protection appropriée des données à partir d’Intune. Étant donné que la majeure partie du travail repose sur vous en tant que développeur, l’intégration d’Intune est légèrement plus complexe.

Intégrer GAM :

  1. Lisez attentivement le guide Android sur la sauvegarde de clé/valeur et plus particulièrement sur l’extension de BackupAgent pour vous assurer que votre implémentation de BackupAgent respecte les directives Android.

  2. Demandez à votre classe d’étendre MAMBackupAgent.

Sauvegarde multi-identités :

  1. Avant de commencer votre sauvegarde, case activée que les fichiers ou les mémoires tampons de données que vous envisagez de sauvegarder sont autorisés par l’administrateur informatique à être sauvegardés dans les scénarios multi-identités. S’utilise isBackupAllowed dans MAMFileProtectionManager et MAMDataProtectionManager pour déterminer ce comportement. Si le fichier ou la mémoire tampon de données ne peut pas être sauvegardé, vous ne devez pas l’inclure dans votre sauvegarde.

  2. À un moment donné au cours de votre sauvegarde, si vous souhaitez sauvegarder les identités des fichiers que vous avez vérifiés à l’étape 1, vous devez appeler backupMAMFileIdentity(BackupDataOutput data, File … files) les fichiers dont vous prévoyez d’extraire les données. Cette méthode crée automatiquement de nouvelles entités de sauvegarde et les écrit dans le BackupDataOutput pour vous. Ces entités sont automatiquement consommées lors de la restauration.

Restauration multi-identités : Le guide de sauvegarde des données spécifie un algorithme général pour restaurer les données de votre application et fournit un exemple de code dans la section Extension de BackupAgent . Pour effectuer une restauration multi-identités réussie, vous devez suivre la structure générale fournie dans cet exemple de code en accordant une attention particulière aux points suivants :

  1. Vous devez utiliser une while(data.readNextHeader())boucle * pour parcourir les entités de sauvegarde.

  2. Vous devez appeler data.skipEntityData()si data.getKey() ne correspond pas à la clé que vous avez écrite dans onBackup. Sans cette étape, vos restaurations risquent de ne pas réussir.

  3. Évitez de retourner lors de la consommation d’entités de sauvegarde dans la while(data.readNextHeader())construction *, car toutes les entités que nous écrivons automatiquement sont perdues dans ce cas.

  • data est le nom de variable locale pour MAMBackupDataInput que l’application reçoit lors de la restauration.

Restrictions de capture d’écran personnalisé

Si votre application contient une fonctionnalité de capture d’écran personnalisée qui contourne la restriction au niveau FLAG_SECURE d’Android, vous devez vérifier la stratégie de capture d’case activée avant d’autoriser l’accès Windowcomplet à la fonctionnalité. Par exemple, si votre application utilise un moteur de rendu personnalisé pour afficher la vue actuelle dans un fichier PNG, vous devez d’abord vérifier la case activéeAppPolicy.getIsScreenCaptureAllowed().

Remarque

Si l’application ne contient aucune fonctionnalité de capture d’écran personnalisée ou non-Microsoft, aucune action n’est requise pour restreindre les captures d’écran. La stratégie de capture d’écran est automatiquement appliquée au Window niveau pour toutes les applications intégrées MAM. Toutes les tentatives du système d’exploitation ou d’une autre application de capturer un Window dans votre application sont bloquées au besoin. Par exemple, si un utilisateur tente de capturer l’écran de votre application via les fonctionnalités intégrées de capture d’écran ou d’enregistrement d’écran, la capture est automatiquement restreinte sans la participation de votre application.

Soutenir l’autorité de certification Protection des applications

L’accès conditionnel (accès conditionnel) pour la protection des applications, également appelé autorité de certification basée sur une application, restreint l’accès aux ressources. Les stratégies de protection des applications Intune doivent gérer votre application avant de pouvoir accéder à ces ressources. Microsoft Entra ID applique cette stratégie en exigeant que l’application s’inscrive et soit gérée par les stratégies de protection des applications Intune avant d’accorder un jeton pour accéder à une ressource protégée par un accès conditionnel.

Remarque

Protection des applications La prise en charge de l’autorité de certification nécessite la bibliothèque d’authentification Microsoft (MSAL) version 1.0.0 ou ultérieure.

Gérer la non-conformité à MSAL

Lorsque l’application acquiert un jeton pour un compte, la bibliothèque MSAL peut retourner ou lever un MsalIntuneAppProtectionPolicyRequiredException pour indiquer la non-conformité à la gestion des stratégies de protection des applications. Vous pouvez extraire d’autres paramètres de l’exception pour les utiliser dans la correction de la conformité (voir MAMComplianceManager). Une fois la correction réussie, l’application peut tenter à nouveau l’acquisition de jetons via MSAL.

MAMComplianceManager

L’interface MAMComplianceManager est utilisée lorsque l’erreur de stratégie requise est reçue de MSAL. Il contient la méthode [remediateCompliance] que vous devez appeler pour tenter de mettre l’application dans un état conforme. Vous pouvez obtenir une référence aux éléments MAMComplianceManager suivants :

MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);

// make use of mgr

L’instance MAMComplianceManager renvoyée est garantie de ne pas être null.

package com.microsoft.intune.mam.policy;

public interface MAMComplianceManager {
    void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}

La remediateCompliance() méthode tente de mettre l’application sous gestion pour satisfaire les conditions permettant à Microsoft Entra ID d’accorder le jeton demandé. Les quatre premiers paramètres peuvent être extraits de l’exception que reçoit la méthode MSAL AuthenticationCallback.onError() . Le dernier paramètre est une valeur booléenne qui contrôle si une expérience utilisateur s’affiche lors de la tentative de conformité.

remediateCompliance Affiche une simple boîte de dialogue de progression de blocage afin que les applications n’aient pas besoin d’afficher des expériences personnalisées pendant cette opération. Cette boîte de dialogue s’affiche uniquement lorsque la correction de conformité est en cours. Le résultat final n’est pas affiché. Votre application peut inscrire un destinataire pour la COMPLIANCE_STATUS notification afin de gérer la réussite ou l’échec de la tentative de correction de conformité. Pour plus d’informations, consultez Notifications de l’état de status de conformité.

remediateCompliance() peut lancer une inscription MAM dans le cadre de l’établissement de la conformité. L’application peut recevoir une notification d’inscription si elle a inscrit un destinataire de notification pour les notifications d’inscription. La méthode inscrite MAMServiceAuthenticationCallback de l’application est acquireToken() appelée afin d’obtenir un jeton pour l’inscription. acquireToken() est appelée avant que l’application acquière son propre jeton. Les tâches de comptabilité ou de création de compte effectuées par l’application après une acquisition réussie de jetons ne l’ont peut-être pas encore été. Le rappel doit être en mesure d’acquérir un jeton dans ce cas.

Si vous ne pouvez pas retourner un jeton à partir de , la tentative de acquireToken()correction de conformité échoue.

Si vous appelez updateToken ultérieurement avec un jeton valide pour la ressource demandée, la correction de conformité reprend immédiatement avec le jeton donné.

Remarque

L’acquisition de jetons silencieux est toujours possible dans acquireToken() car l’utilisateur a déjà été guidé pour installer le courtier et inscrire l’appareil avant que l’exception MsalIntuneAppProtectionPolicyRequiredException ne se produise. Ce processus entraîne la présence d’un jeton d’actualisation valide dans le cache du courtier, ce qui lui permet d’acquérir le jeton demandé en mode silencieux.

Voici un exemple qui reçoit l’erreur de stratégie requise dans la AuthenticationCallback.onError() méthode et appelle MAMComplianceManager pour traiter l’erreur.

public void onError(@Nullable MsalException exc) {
    if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {

        final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
            (MsalIntuneAppProtectionPolicyRequiredException) ex;

        final String upn = policyRequiredException.getAccountUpn();
        final String aadId = policyRequiredException.getAccountUserId();
        final String tenantId = policyRequiredException.getTenantId();
        final String authority = policyRequiredException.getAuthorityURL();

        MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
        complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
    }
}

Notifications de l’état de status de conformité

Si l’application s’inscrit pour les notifications de type COMPLIANCE_STATUS, le système envoie un MAMComplianceNotification pour informer l’application de la status finale de la tentative de correction de conformité. Pour plus de détails sur l’inscription, consultez S’inscrire pour recevoir des notifications du Kit de développement logiciel (SDK ).

public interface MAMComplianceNotification extends MAMUserNotification {
    MAMCAComplianceStatus getComplianceStatus();
    String getComplianceErrorTitle();
    String getComplianceErrorMessage();
}

La getComplianceStatus() méthode retourne le résultat de la tentative de correction de conformité sous la forme d’une valeur de l’énumération [MAMCAComplianceStatus].

Code d'état Explication
UNKNOWN Le statut est inconnu. Ce status peut indiquer une raison d’échec imprévue. Vous trouverez plus d’informations dans les journaux du Portail d’entreprise.
COMPLIANT La correction de conformité a réussi et l’application est désormais conforme à la stratégie. L’acquisition du jeton MSAL doit être tentée à nouveau.
NOT_COMPLIANT La tentative de correction de la conformité a échoué. L’application n’est pas conforme et l’acquisition de jetons MSAL ne doit pas être tentée à nouveau tant que la condition d’erreur n’est pas corrigée. Le MAMComplianceNotification comprend des informations d’erreur supplémentaires.
SERVICE_FAILURE Un échec s’est produit lors de la tentative de récupération des données de conformité à partir du service Intune. Vous trouverez plus d’informations dans les journaux du Portail d’entreprise.
NETWORK_FAILURE Une erreur s’est produite lors de la connexion au service Intune. L’application doit retenter son acquisition de jetons lorsque la connexion réseau est restaurée.
CLIENT_ERROR La tentative de correction de la conformité a échoué en raison d’un problème lié au client, tel qu’un jeton utilisateur manquant ou incorrect. Le MAMComplianceNotification inclut plus d’informations sur l’erreur.
PENDING La tentative de correction de la conformité échoue, car le service n’envoie pas la réponse de status avant l’expiration du délai. L’application doit réessayer son acquisition de jetons plus tard.
COMPANY_PORTAL_REQUIRED Le Portail d’entreprise doit être installé sur l’appareil pour que la correction de la conformité réussisse. Si elle est déjà installée, l’application doit être redémarrée. Une boîte de dialogue invite l’utilisateur à redémarrer l’application.

Si le status de conformité est MAMCAComplianceStatus.COMPLIANT, l’application doit relancer son acquisition de jeton d’origine (pour sa propre ressource).

Si la tentative de correction de conformité a échoué, les getComplianceErrorTitle() méthodes et getComplianceErrorMessage() renvoient des chaînes localisées que l’application peut afficher à l’utilisateur final si elle le souhaite. L’application ne peut pas résoudre la plupart des cas d’erreur. En général, faites échouer la création ou la connexion du compte et autorisez l’utilisateur à réessayer plus tard.

Si un échec est persistant, les journaux du Portail d’entreprise peuvent vous aider à déterminer la cause. L’utilisateur final peut envoyer les journaux. Pour plus d’informations, reportez-vous à la section Journaux de chargement et de messagerie.

Voici un exemple d’inscription d’un récepteur utilisant une classe anonyme pour implémenter l’interface MAMNotificationReceiver :

final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
    public boolean onReceive(MAMNotification notification) {
        if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
            MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;

            // take appropriate action based on complianceNotification.getComplianceStatus()

            // unregister this receiver if no longer needed
            notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
        }
        return true;
    }
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);

Remarque

Vous devez enregistrer le destinataire de la notification avant d’appeler remediateCompliance() pour éviter une condition de concurrence qui pourrait entraîner l’omission de la notification.

Déclaration de la prise en charge d’App Protection CA

Une fois que votre application est prête à gérer la correction de l’autorité de certification d’application, vous pouvez indiquer à Microsoft Identity que votre application est prête pour l’autorité de certification. Pour ce faire dans l’application MSAL, créez le client public avec les fonctionnalités client de « protapp »

{
      "client_id" : "[YOUR_CLIENT_ID]",
      "authorization_user_agent" : "DEFAULT",
      "redirect_uri" : "[YOUR_REDIRECT_URI]",
      "multiple_clouds_supported":true,
      "broker_redirect_uri_registered": true,
      "account_mode": "MULTIPLE",
      "client_capabilities": "protapp",
      "authorities" : [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount"
          }
        }
      ]
    }

Une fois les étapes terminées, passez à la validation de l’autorité de certification Protection des applications.

Notes sur la mise en œuvre

Remarque

La méthode de MAMServiceAuthenticationCallback.acquireToken() l’application doit passer false pour que l’indicateur forceRefresh soit acquireTokenSilentAsync().

AcquireTokenSilentParameters acquireTokenSilentParameters =
        builder.withScopes(Arrays.asList(scopes))
               .forceRefresh(false)
               .build();

acquireTokenSilentAsync(acquireTokenSilentParameters);

Remarque

Si vous souhaitez afficher une expérience utilisateur de blocage personnalisée pendant la tentative de correction, vous devez transmettre false pour le paramètre showUX à remediateCompliance(). Vous devez d’abord vous assurer d’afficher votre UX et d’inscrire votre auditeur de notification avant d’appeler remediateCompliance(). Ceci permet d’éviter une situation de concurrence dans laquelle la notification pourrait être manquée en cas d’échec remediateCompliance() rapide. Par exemple, la onCreate() méthode ou onMAMCreate() d’une sous-classe Activity est l’endroit idéal pour enregistrer l’écouteur de notification, puis appeler remediateCompliance(). Les paramètres peuvent remediateCompliance() être transmis à votre expérience utilisateur en tant qu’extras d’intention. Lorsque la notification de status de conformité est reçue, vous pouvez afficher le résultat ou terminer l’activité.

Remarque

remediateCompliance() Enregistre le compte et tente l’inscription. Une fois le jeton principal acquis, l’appel registerAccountForMAM() n’est pas nécessaire, mais il n’y a aucun mal à le faire. En revanche, si l’application ne parvient pas à acquérir son jeton et souhaite supprimer le compte d’utilisateur, elle doit appeler unregisterAccountForMAM() pour supprimer le compte et empêcher les tentatives d’inscription en arrière-plan.

S’inscrire pour recevoir des notifications à partir du SDK

Le guide du Kit de développement logiciel (SDK) d’application Intune aborde plusieurs scénarios dans lesquels votre application peut être amenée à s’inscrire pour recevoir des notifications du Kit de développement logiciel (SDK), notamment :

Cette section décrit chaque type de notification que le SDK peut envoyer, quand et pourquoi votre application souhaite l’écouter, et comment implémenter un récepteur de notification.

Types de notifications

Toutes les notifications du Kit de développement logiciel (SDK) implémentent l’interface MAMNotification , qui possède une seule fonction, getType(), qui renvoie une énumération MAMNotificationType .

La plupart des notifications sont des instances MAMUserNotification , qui fournissent des informations spécifiques à une identité unique. L’OID de l’identité peut être récupéré via la getUserOid() fonction, et l’UPN de l’identité peut être récupéré via getUserIdentity().

MAMEnrollmentNotification et MAMComplianceNotification étendent MAMUserNotification, qui contiennent respectivement les résultats des tentatives d’inscription d’un utilisateur ou d’un appareil auprès du service GAM et les résultats des tentatives de correction de la conformité pour l’autorité de certification Protection des applications.

Type de notification Classe de notification Motif de la notification Applicabilité Conseils pour la manipulation Informations sur le thread
COMPLIANCE_STATUS MAMComplianceNotification Renvoie le résultat d’une tentative de correction de conformité. Les applications qui implémentent l’autorité de certification Protection des applications doivent gérer cela. Non déterministe
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Renvoie le résultat d’une tentative d’inscription. Toutes les applications le reçoivent. Non déterministe
MANAGEMENT_REMOVED MAMUserNotification L’application est sur le point de n’être plus gérée. Les applications qui l’utilisent MAMDataProtectionManager doivent gérer cela. Voir MANAGEMENT_REMOVED. Jamais sur le thread d’interface utilisateur
REFRESH_APP_CONFIG MAMUserNotification Les valeurs de configuration de l’application ont peut-être changé. Les applications qui implémentent la configuration des applications et mettent en cache les données de configuration des applications doivent gérer cela. Les applications doivent invalider et actualiser toutes les données de configuration d’application mises en cache. Non déterministe
REFRESH_POLICY MAMUserNotification La stratégie de protection d’applications a peut-être changé. Les applications qui mettent en cache la stratégie de protection des applications doivent gérer cela. Les applications doivent invalider et mettre à jour les données de stratégie de protection des applications mises en cache. Non déterministe
WIPE_USER_DATA MAMUserNotification L’effacement est sur le point de se produire (*). Les applications qui utilisent MAMDataProtectionManager doivent gérer cela ouWIPE_USER_AUXILIARY_DATA. Voir Réinitialisation sélective. Jamais sur le thread d’interface utilisateur
WIPE_USER_AUXILIARY_DATA MAMUserNotification L’effacement est sur le point de se produire (*). Seules les applications à identités multiples le reçoivent.
Les applications qui utilisent MAMDataProtectionManager doivent gérer cela ouWIPE_USER_DATA.
Voir Réinitialisation sélective. Jamais sur le thread d’interface utilisateur
WIPE_COMPLETED MAMUserNotification L’effacement est terminé. Facultatif pour toutes les applications. Livré après WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA.
Si l’application signale un échec à partir de son gestionnaire d’effacement, cette notification n’est pas envoyée.
Jamais sur le thread d’interface utilisateur

(*) Les réinitialisations peuvent se produire pour de nombreuses raisons, par exemple :

  • Votre application nommée unregisterAccountForMAM.
  • Un administrateur informatique a lancé une réinitialisation à distance.
  • Les stratégies d’accès conditionnel requises par l’Administration n’étaient pas satisfaites.

Avertissement

Une application ne doit jamais s’inscrire à la fois pour les notifications et WIPE_USER_AUXILIARY_DATA .WIPE_USER_DATA

MANAGEMENT_REMOVED

La MANAGEMENT_REMOVED notification informe l’application qu’un compte précédemment géré par une stratégie est sur le point de ne plus être géré. Une fois le compte non géré, l’application ne peut plus lire les fichiers chiffrés du compte, lire les données du compte chiffré avec MAMDataProtectionManager, interagir avec le Presse-papiers chiffré ou participer de quelque manière que ce soit à l’écosystème d’applications gérées.

Cela ne nécessite pas d’effacer les données utilisateur ou de déconnecter l’utilisateur (si une réinitialisation était requise, une WIPE_USER_DATA notification serait envoyée). De nombreuses applications n’ont peut-être pas besoin de gérer cette notification, mais celles qui l’utilisent MAMDataProtectionManager doivent le faire. Pour plus d’informations, consultez Protection de la mémoire tampon de données .

Lorsque le SDK appelle le destinataire de MANAGEMENT_REMOVED l’application, les conditions suivantes sont remplies :

  • Le SDK a déjà déchiffré des fichiers précédemment chiffrés (mais pas des tampons de données protégés) qui appartiennent à l’application. Files dans des emplacements publics sur la carte SD carte qui n’appartiennent pas directement à l’application (par exemple, les dossiers Documents ou Téléchargement) ne sont pas déchiffrés.

  • Les nouveaux fichiers ou les mémoires tampons de données protégées créés par la méthode du récepteur (ou tout autre code exécuté après le démarrage du destinataire) ne sont pas chiffrés.

  • L’application a toujours accès aux clés de chiffrement, de sorte que les opérations telles que le déchiffrement des mémoires tampons de données réussissent.

Une fois que le récepteur de votre application est revenu, il n’a plus accès aux clés de chiffrement.

Implémentation de MAMNotificationReceiver

Pour s’inscrire aux notifications du Kit de développement logiciel (SDK), votre application doit créer un MAMNotificationReceiver et l’enregistrer auprès de MAMNotificationReceiverRegistry.

Pour enregistrer le récepteur, appelez registerReceiver avec votre récepteur et le type de notification souhaité dans votre Application.onCreate méthode :

@Override
public void onCreate() {
  super.onCreate();
  MAMComponents.get(MAMNotificationReceiverRegistry.class)
    .registerReceiver(
      new ToastNotificationReceiver(),
      MAMNotificationType.WIPE_USER_DATA);
}

L’implémentation MAMNotificationReceiver de votre application doit inclure la onReceive(MAMNotification notification) méthode. Cette méthode invoque individuellement pour chaque notification reçue et doit renvoyer un boolean. En règle générale, cette méthode doit toujours retourner true, sauf si votre application a rencontré un échec en réponse à une notification.

Comme pour les autres types de récepteurs Android, votre application dispose d’une certaine souplesse dans la gestion des notifications :

  • Il peut créer des implémentations MAMNotificationReceiver distinctes pour différents types de notification. Dans ce cas, veillez à inscrire chaque implémentation et chaque type de notification séparément.
  • Il peut utiliser une seule implémentation MAMNotificationReceiver qui contient une logique pour répondre à plusieurs types de notifications distincts. Dans ce cas, il doit être inscrit pour chaque type de notification auquel il peut répondre.
  • Il peut créer plusieurs implémentations MAMNotificationReceiver qui répondent chacune au même type de notification. Dans ce cas, les deux doivent être inscrits auprès du même type de notification.

Conseil

Il est possible de bloquer en MAMNotificationReceiver.onReceive toute sécurité, car son rappel ne s’exécute pas sur le thread d’interface utilisateur.

Thèmes personnalisés

Un thème personnalisé peut être fourni au Kit de développement logiciel (SDK) d’application Intune. Ce thème personnalisé s’applique à tous les écrans et boîtes de dialogue du Kit de développement logiciel (SDK). Si aucun thème n’est fourni, le thème du SDK par défaut est utilisé.

Fourniture d’un thème personnalisé

Pour fournir un thème, ajoutez la ligne de code suivante dans la Application.onMAMCreate méthode :

MAMThemeManager.setAppTheme(R.style.AppTheme);

Dans l’exemple, remplacez R.style.AppTheme par le thème de style que le SDK doit appliquer.

Gestion des certificats racines de confiance

Si l’application nécessite des certificats SSL/TLS émis par une autorité de certification locale ou privée pour fournir un accès sécurisé aux sites web et applications internes, le kit de développement logiciel (SDK) d’application Intune a ajouté la prise en charge de la gestion des certificats avec les classes d’API MAMTrustedRootCertsManager et MAMCertTrustWebViewClient.

Remarque

MAMCertTrustWebViewClient prend en charge Android 10 ou version ultérieure.

La gestion des certificats racines de confiance prend en charge les éléments suivants :

  • SSLContext
  • SSLSocketFactory
  • Gestionnaire d’approbation
  • Affichage web

Configuration requise

Remarque

La gestion des certificats racines de confiance peut être utilisée indépendamment de la passerelle VPN de Microsoft Tunnel, mais vous devez disposer d’une licence Microsoft GAM Tunnel.

Utilisation de certificats racines de confiance à partir d’Intune pour établir des ancres d’approbation

La gestion des certificats racines approuvés permet à votre application d’utiliser des certificats racines approuvés d’Intune en combinaison avec des certificats de l’appareil.

Les classes d’API MAMTrustedRootCertsManager et MAMCertTrustWebViewClient utilisent les certificats racines de confiance Intune fournis via App Configuration Policy comme option de secours si les magasins de certificats racines de confiance de l’appareil ne contiennent pas les certificats racines de confiance requis pour établir une connexion sécurisée aux ressources locales. De cette façon, l’application peut utiliser à la fois des certificats d’appareil et d’Intune pour vérifier la sécurité des connexions et de la communication avec des sources approuvées.

Pour améliorer ses paramètres de sécurité réseau, une application peut utiliser le fichier XML de configuration de sécurité réseau. La gestion des certificats racines de confiance respecte cette sécurité supplémentaire en vérifiant si le XML de configuration de la sécurité réseau de l’application possède l’une de ces fonctionnalités :

  • Ancres de confiance personnalisées avec des autorités de certification supplémentaires telles que des certificats auto-signés.
  • Règles spécifiques à un domaine pour limiter les autorités de certification approuvées.
  • Jeux d’épingles pour des certificats pour des domaines spécifiques.

Remarque

Pour plus d’informations sur la configuration de la sécurité réseau Android, consultez Configuration de la sécurité réseau.

Si l’un de ces cas s’applique à un domaine dont l’approbation est vérifiée, la gestion des certificats racines de confiance ignore les vérifications de confiance personnalisées pour ce domaine et laisse uniquement les gestionnaires de confiance par défaut de la plateforme effectuer les vérifications.

Classe MAMTrustedRootCertsManager

Cette classe fournit les API suivantes :

  • createSSLContextForOID(String oid, String protocol): crée un objet qui utilise des SSLContext certificats racines approuvés pour l’identité et le protocole SSL/TLS spécifiés. L’objet renvoyé SSLContext de cette classe est déjà initialisé correctement avec X509TrustManager des objets qui utilisent les certificats racines de confiance combinés de l’appareil et du service MAM.
  • createSSLSocketFactoryForOID(String oid, String protocol): crée un objet qui utilise des SSLSocketFactory certificats racines approuvés pour l’identité et le protocole SSL/TLS spécifiés. L’objet renvoyé SSLSocketFactory est référencé à partir du même SSLContext objet dans cette classe.
  • createX509TrustManagersForOID(String oid): crée un tableau d’objets X509TrustManager qui utilisent les certificats racines de confiance combinés de l’appareil et du service MAM pour l’identité spécifiée.

Remarque

Le oid paramètre devrait être l’ID utilisateur (OID) de Microsoft Entra pour un utilisateur particulier qui exécute l’application. Si l’identificateur utilisateur est inconnu à l’avance, vous pouvez transmettre une valeur de null et MAM tente de découvrir l’identité correcte à partir du thread ou du processus dans lequel ces API sont appelées. L’identité doit être correctement définie sur le processus ou le thread pour que MAM puisse découvrir l’identité. Pour plus d’informations sur la définition de l’identité active sur un processus ou un thread, voir Étape 5 : multi-identités.

Remarque

Lorsque le protocol paramètre n’est pas fourni, la plateforme utilise le protocole SSL/TLS le plus élevé.

Voici quelques exemples d’utilisation de cette classe.

Exemple d’utilisation de HttpsUrlConnection
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");

// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");

// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();

// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);

// Perform any other configuration or operations on the connection as needed
...
Exemple d’utilisation de OkHttpClient
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);

// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");

// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);

// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();

// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();

// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();

// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();

// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();

// Perform any other operations on the response as needed
...

Classe MAMCertTrustWebViewClient

Cette classe fournit une implémentation personnalisée de la classe android.webkit.WebViewClientAndroid . Cette classe permet de gérer l’erreur android.net.http.SslError.SSL_UNTRUSTED SSL dans WebView.

Lors du traitement de l’erreur, la classe utilise des certificats racines approuvés configurés par Intune et fournis par le service GAM. Cette approche vérifie la fiabilité de l’hôte à partir de l’URL cible qui a généré l’erreur SSL dans WebView. Si l’implémentation personnalisée ne gère pas l’erreur SSL, le système appelle le comportement par défaut hérité de la superclasse.

Lorsque vous utilisez cette classe, créez-en une instance, puis appelez-la WebView.setWebViewClient(WebViewClient) pour l’inscrire auprès d’une WebView instance.

Voici un exemple d’utilisation de cette classe.

Exemple d’utilisation de WebView
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();

// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);

// Perform any other operations on WebView
...

Conformité de la confidentialité du China App Store

Certaines boutiques d’applications en Chine exigent que les applications affichent une boîte de dialogue de consentement en matière de protection de la vie privée aux utilisateurs avant d’effectuer des opérations qui interagissent avec d’autres applications sur l’appareil. Cela inclut l’enregistrement des récepteurs de diffusion qui écoutent les événements d’installation/désinstallation de package. Le SDK MAM effectue cette opération pour écouter la présence du Portail d’entreprise où se trouve la majeure partie de la logique MAM.

Si votre application est distribuée via des magasins d’applications en Chine qui ont cette exigence, utilisez l’intégration suivante pour différer les opérations de démarrage hors connexion jusqu’à ce que le consentement de la confidentialité ait été obtenu.

1. Ajouter un indicateur de manifeste

Ajoutez les métadonnées suivantes à votre application AndroidManifest.xml:

<application>
    <meta-data
        android:name="com.microsoft.intune.mam.OfflineStartupDeferredUntilAppSignal"
        android:value="true"/>
</application>

Remarque

Cet indicateur ne doit être ajouté qu’aux APK distribués via les boutiques d’applications chinoises qui exigent un consentement en matière de protection de la vie privée avant d’interagir avec d’autres applications. Pour les APK distribués via d’autres magasins, cet indicateur ne doit pas être inclus.

2. Signaler la préparation après la boîte de dialogue de confidentialité

Une fois que l’utilisateur a accepté votre boîte de dialogue de consentement en matière de protection de la vie privée, appelez le Kit de développement logiciel (SDK) pour signaler que les opérations de démarrage hors connexion peuvent se poursuivre :

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager::class.java)
    .setOfflineStartupReady()

Ou en Java :

// After user accepts privacy dialog
MAMComponents.get(DeferredStartupManager.class)
    .setOfflineStartupReady();

Comportement

L’état Prêt est conservé entre les lancements d’applications. Une fois setOfflineStartupReady() appelé, les lancements suivants enregistreront le récepteur immédiatement lors de l’initialisation de l’application.

Notes

  • La setOfflineStartupReady() méthode est idempotente ; l’appeler plusieurs fois est sûr.
  • Si le Portail d’entreprise est déjà installé (mode en ligne), l’appel setOfflineStartupReady() n’a aucun effet puisque le récepteur n’est pas nécessaire.
  • Important : Vous devez toujours appeler setOfflineStartupReady() après avoir accepté votre boîte de dialogue de confidentialité.

Critères de sortie

Pour plus d’informations, consultez Tester rapidement avec la modification de stratégie pour faciliter les tests.

Validation, enregistrer dans et ouvrir à partir des restrictions

Ignorez cette section si vous n’avez pas implémenté la stratégie de limitation du transfert de données entre les applications et les emplacements de stockage d’appareil ou cloud.

Familiarisez-vous à nouveau avec chaque scénario dans lequel votre application peut enregistrer des données dans des services cloud ou des données locales et ouvrir des données à partir de services cloud ou de données locales.

Pour simplifier, ces tests supposent que votre application inclut uniquement la prise en charge de l’enregistrement et de l’ouverture de données à partir de OneDrive à partir d’un emplacement unique dans l’application. Toutefois, vous devez valider chaque combinaison : chaque emplacement d’enregistrement pris en charge par rapport à chaque emplacement où votre application autorise l’enregistrement des données, et chaque emplacement ouvert pris en charge par rapport à chaque emplacement où votre application autorise l’ouverture des données.

Pour ces tests, installez votre application et le Portail d’entreprise Intune ; connectez-vous avec un compte géré avant de commencer le test. En outre :

  • Définissez la stratégie du compte géré comme suit :
    • « Envoyer des données d’organisation à d’autres applications » défini sur « Applications gérées par une stratégie ».
    • « Recevoir des données d’autres applications » défini sur « Applications gérées par une stratégie ».
Scénario Conditions préalables Étapes
Enregistrer sous, Entièrement autorisé stratégie « Enregistrer une copie des données de l’organisation » définie sur Autoriser - Accédez à la partie de votre application où il peut enregistrer des données sur OneDrive.
- Essayez d’enregistrer un document sur OneDrive en utilisant le même compte géré connecté à votre application.
- Vérifiez que la sauvegarde est autorisée.
Enregistrer vers, exempté - La stratégie « Enregistrer une copie des données de l’organisation » est définie sur Bloquer
- La stratégie « Autoriser l’utilisateur à enregistrer des copies dans les services sélectionnés » est définie sur OneDrive uniquement
- Accédez à la partie de votre application où il peut enregistrer des données sur OneDrive.
- Essayez d’enregistrer un document sur OneDrive en utilisant le même compte géré connecté à votre application.
- Vérifiez que la sauvegarde est autorisée.
- Si votre application le permet, essayez d’enregistrer le fichier dans un autre emplacement de stockage cloud et confirmez qu’il est bloqué.
Enregistrer sous, bloqué Stratégie « Enregistrer une copie des données de l’organisation » définie sur Bloquer - Accédez à la partie de votre application où il peut enregistrer des données sur OneDrive.
- Essayez d’enregistrer un document sur OneDrive en utilisant le même compte géré connecté à votre application.
- Vérifiez que la sauvegarde est bloquée.
- Si votre application le permet, essayez d’enregistrer le fichier dans un autre emplacement de stockage cloud et confirmez qu’il est bloqué.
Ouvert depuis, entièrement autorisé stratégie « Ouvrir des données dans des documents organisationnels » définie sur Autoriser - Accédez à la partie de votre application où il peut ouvrir des données à partir de OneDrive.
- Essayez d’ouvrir un document à partir de OneDrive en utilisant le même compte géré connecté au stockage de votre application.
- Vérifiez que l’ouverture est autorisée.
Ouvert de, exempté - Stratégie « Ouvrir des données dans des documents organisationnels » définie sur Bloquer
- La stratégie « Autoriser les utilisateurs à ouvrir les données des services sélectionnés » est définie sur OneDrive uniquement
- Accédez à la partie de votre application où il peut ouvrir des données à partir de OneDrive.
- Essayez d’ouvrir un document à partir de OneDrive en utilisant le même compte géré connecté au stockage de votre application.
- Vérifiez que l’ouverture est autorisée.
- Si votre application le permet, essayez d’ouvrir un autre fichier à partir d’un autre emplacement de stockage cloud et confirmez qu’il est bloqué.
Ouvrir de, bloqué Stratégie « Ouvrir des données dans des documents organisationnels » définie sur Bloquer - Accédez à la partie de votre application où il peut ouvrir des données à partir de OneDrive.
- Essayez d’ouvrir un document à partir de OneDrive en utilisant le même compte géré connecté au stockage de votre application.
- Vérifiez que l’ouverture est bloquée.
- Si votre application le permet, essayez d’ouvrir un autre fichier à partir d’un autre emplacement de stockage cloud et confirmez qu’il est bloqué.

Validation des restrictions de notification

Ignorez cette section si vous n’avez pas implémenté de stratégie de restriction du contenu dans les notifications.

En ce qui concerne la stratégie de protection des applications, votre application peut déclencher trois types de notifications différents :

  1. Les notifications qui ne contiennent aucune donnée de compte.
  2. Notifications contenant des données appartenant à un compte géré.
  3. Les notifications qui contiennent des données appartenant à un compte non géré.

Si votre application est à identité unique, seules les deux premières sont pertinentes, car aucune protection n’est appliquée si le compte unique n’est pas géré.

Vous pouvez valider les restrictions de notification en déclenchant les trois types de notifications avec des valeurs de stratégie différentes configurées.

Pour ces tests, installez votre application et le Portail d’entreprise Intune ; connectez-vous avec un compte géré avant de commencer le test. Si votre application est multi-identités, connectez-vous également à votre application avec un compte non géré.

Scénario Conditions préalables Étapes
Contenu complet bloqué Stratégie « Notifications de données organisationnelles » définie sur Bloquer - Déclenchez votre application pour qu’elle déclenche une notification sans données de compte.
- Vérifiez que la notification n’affiche aucun contenu.
- Déclenchez votre application pour déclencher une notification avec les données du compte géré.
- Vérifiez que la notification n’affiche aucun contenu.
- Déclenchez votre application pour déclencher une notification avec les données du compte non géré.
- Vérifiez que la notification n’affiche aucun contenu.
Contenu partiel bloqué Stratégie « Notifications de données d’organisation » définie sur Bloquer les données d’organisation - Déclenchez votre application pour qu’elle déclenche une notification sans données de compte.
- Vérifiez que la notification affiche son contenu complet.
- Déclenchez votre application pour déclencher une notification avec les données du compte géré.
- Confirmez que la notification caviarde le contenu du compte géré.
- Déclenchez votre application pour déclencher une notification avec les données du compte non géré.
- Vérifiez que la notification affiche son contenu complet.
Aucun contenu bloqué Stratégie « Notifications de données organisationnelles » définie sur Autoriser - Déclenchez votre application pour qu’elle déclenche une notification sans données de compte.
- Vérifiez que la notification affiche son contenu complet.
- Déclenchez votre application pour déclencher une notification avec les données du compte géré.
- Vérifiez que la notification affiche son contenu complet.
- Déclenchez votre application pour déclencher une notification avec les données du compte non géré.
- Vérifiez que la notification affiche son contenu complet.

Validation de la sauvegarde et de la restauration de données

Ignorez cette section si vous n’avez pas implémenté de stratégie de protection des données de sauvegarde.

Familiarisez-vous à nouveau avec le contenu (fichiers et paires clé-valeur) que votre application a configuré pour la sauvegarde. Vous devez valider que seul le contenu attendu fait partie de la restauration. Un contenu supplémentaire dans la restauration peut entraîner une fuite de données.

Pour ces tests, installez votre application et le Portail d’entreprise Intune ; connectez-vous avec un compte géré avant de commencer le test. Si votre application est multi-identités, connectez-vous également à votre application avec un compte non géré.

Suivez les instructions officielles d’Android pour tester la sauvegarde. Ces instructions diffèrent pour la sauvegarde automatique et les sauvegardes de clé/valeur. Suivez-les donc scrupuleusement.

Validation de la capture d’écran personnalisée par rapport à la stratégie

Ignorez cette section si vous n’avez pas implémenté les restrictions de capture d’écran personnalisées.

Si votre application possède une fonctionnalité qui contourne le niveau FLAG_SECUREd’AndroidWindow, validez que cette fonctionnalité est bloquée par les restrictions de capture d’écran de la stratégie de protection des applications.

Pour ces tests, installez votre application et le Portail d’entreprise Intune ; connectez-vous avec un compte géré avant de commencer le test.

Scénario Conditions préalables Étapes
Capture d’écran bloquée Stratégie « Capture d’écran et Assistant Google » définie sur Bloquer - Accédez à la partie de votre application qui utilise le code personnalisé FLAG_SECURE .
- Essayez d’utiliser cette fonctionnalité.
- Vérifiez que la fonctionnalité est bloquée.
Capture d’écran autorisée Stratégie « Capture d’écran et Assistant Google » définie sur Autoriser - Accédez à la partie de votre application qui utilise le code personnalisé FLAG_SECURE .
- Essayez d’utiliser cette fonctionnalité.
- Vérifiez que la fonctionnalité est autorisée.

Validation de l’autorité de certification Protection des applications

Ignorez cette section si vous n’avez pas implémenté l’autorité de certification de protection des applications de support.

Outre les étapes de validation classiques de création et d’attribution d’une stratégie de protection des applications à votre application et à votre compte de test, vous devez également créer et affecter une stratégie d’accès conditionnel de protection des applications à votre compte de test. Pour plus d’informations, consultez Configurer des stratégies d’accès conditionnel basées sur des applications avec Intune.

Étapes du test :

  1. Désinstallez Microsoft Authenticator et le Portail d’entreprise Intune avant de commencer ce test.
  2. Installez votre application.
  3. Connectez-vous à votre application avec votre compte de test ciblé par la stratégie de protection des applications et la stratégie d’autorité de certification basée sur les applications.
  4. Confirmez que votre application vous invite à installer le Portail d’entreprise.
  5. Reconnectez-vous.
  6. Vérifiez que votre application vous invite à inscrire votre appareil. Suivez les invites. Si votre application ne demande pas l’inscription ici, vérifiez que votre appareil de test a d’abord désinstallé les autres applications compatibles avec le SDK, le Portail d’entreprise et l’application Authenticator. Si ce n’est toujours pas le cas, relisez les instructions d’implémentation.
  7. Vérifiez que vous êtes en mesure d’accéder à toutes les données de l’application après l’inscription.

Validation des destinataires de notification

Ignorez cette section si vous n’avez pas implémenté Inscrivez-vous pour recevoir des notifications à partir du Kit de développement logiciel (SDK).

Les étapes de validation dépendent des types de notifications pour lesquelles votre application s’est inscrite. Pour tous les types de notifications, ajoutez une journalisation pour vous assurer que votre récepteur est correctement appelé.

MAM_ENROLLMENT_RESULT peut être déclenché en vous connectant à votre application avec un compte ciblé par la stratégie de protection des applications.

Vous pouvez déclencher REFRESH_APP_CONFIG et REFRESH_POLICY mettre à jour l’App Configuration Policy et l’App Protection Policy respectives qui ciblent votre compte de test et en attendant que le SDK reçoive la stratégie mise à jour.

Conseil

Pour accélérer ce processus, consultez Test rapide avec modification de stratégie .

Vous pouvez déclencher MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAet des notifications en WIPE_COMPLETEDémettant une réinitialisation sélective à partir de Microsoft Intune.

Validation des thèmes personnalisés

Ignorez cette section si vous n’avez pas implémenté les thèmes personnalisés.

Vous pouvez valider la prise en charge des thèmes personnalisés en inspectant les couleurs des boîtes de dialogue du Kit de développement logiciel (SDK). La boîte de dialogue la plus simple à case activée est l’écran de code PIN MAM.

Conditions préalables :

  • Définissez la stratégie du compte géré comme suit :
    • « Code PIN pour l’accès » défini sur « Obligatoire ».
  • Installez votre application et le Portail d’entreprise Intune.

Étapes du test :

  1. Lancez votre application et connectez-vous avec le compte de test.
  2. Vérifiez que l’écran du code confidentiel MAM s’affiche et qu’il est thématisé sur la base du thème personnalisé que vous avez fourni au kit de développement logiciel (SDK).

Étapes suivantes

Si vous avez suivi ce guide dans l’ordre et rempli tous les critères de sortie plus tôt dans cet article, votre application est maintenant entièrement intégrée au SDK d’application Intune et peut appliquer des stratégies de protection des applications. Si vous avez ignoré l’une des sections précédentes de participation de l’application, Étape 5 : Identités multiples et Étape 6 : App Configuration, et que vous ne savez pas si votre application doit prendre en charge ces fonctionnalités, consultez à nouveau Décisions clés pour l’intégration du Kit de développement logiciel (SDK).

La protection d’applications est désormais un scénario de base pour votre application. Continuez à consulter ce guide et l’annexe au fur et à mesure que vous développez votre application.