Partage via


Sdk d’application Intune pour Android - Fonctionnalités de participation aux applications

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 APP ou GAM) dans votre application Android Java/Kotlin native. Une application gérée par Intune est une application intégrée au SDK d’application Intune. Les administrateurs Intune peuvent facilement déployer des stratégies de protection des applications sur votre application gérée par Intune quand Intune gère activement l’application.

Remarque

Ce guide est divisé en plusieurs étapes distinctes. Commencez par consulter Planifier l’intégration.

Étape 7 : Fonctionnalités de participation aux applications

Objectifs de la phase

  • Découvrez les différentes fonctionnalités de participation aux applications offertes par le SDK d’application Intune.
  • Intégrez les fonctionnalités de participation d’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 du Kit de développement logiciel (SDK) tente de réduire 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 SDK, votre application peut désormais appliquer la majorité des paramètres de stratégie de protection des applications, tels que le chiffrement des fichiers, 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 que le code spécifique à l’application s’applique correctement ; ces fonctionnalités sont appelées fonctionnalités de participation d’application. En règle générale, le KIT de développement logiciel (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, et s’appuie donc sur les développeurs pour appeler les API du KIT de développement logiciel (SDK) de manière appropriée.

Les fonctionnalités de participation aux applications ne sont pas nécessairement facultatives. Selon les 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 KIT de développement logiciel (SDK ).

Les étapes précédentes de ce guide ont déjà décrit plusieurs fonctionnalités de participation aux applications :

Le reste de ce guide décrit l’ensemble restant des fonctionnalités de participation aux applications :

  • Appliquez la stratégie de restriction de l’enregistrement des fichiers dans/de l’ouverture de fichiers à partir d’un stockage local ou cloud.
  • Appliquer une stratégie limitant le contenu dans les notifications.
  • Appliquez la stratégie protégeant les données de sauvegarde.
  • Appliquer une stratégie limitant la capture d’écran (si votre application dispose d’un code de capture d’écran personnalisé).
  • Prise en charge de l’autorité de certification App Protection.
  • Inscrivez-vous aux notifications à partir du Kit de développement logiciel (SDK).
  • Appliquer des thèmes d’application personnalisés.
  • Utilisez des certificats approuvés d’Intune pour garantir la chaîne de confiance aux points de terminaison locaux.

Concepts de base de la fonctionnalité de participation d’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 aux applications impliquent :

  • Identification de l’emplacement approprié dans le code de votre application pour vérifier si une action est autorisée.
  • Appel d’une AppPolicy méthode pour vérifier si une action est autorisée, en fonction de la stratégie actuellement configurée.
  • Selon le résultat, autorisez l’action à se terminer ou modifiez 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 , telles que getPolicy(final Context context) ou getPolicyForIdentityOID(final String oid).

Méthodes d’information dans AppPolicy

Toutes les méthodes dans AppPolicy ne sont pas liées à une fonctionnalité de participation d’application. Certaines méthodes sont informatives et donnent à votre application des données sur les stratégies actuellement configurées, même si ces stratégies sont automatiquement appliquées par le SDK. Ces méthodes permettent à votre application de présenter une expérience utilisateur personnalisée lorsque des stratégies spécifiques sont configurées.

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

Si votre application dispose d’un contrôle qui permet à l’utilisateur de prendre une capture d’écran, vous pouvez désactiver ou masquer ce contrôle si les captures d’écran de la stratégie de protection des applications sont bloquées.

Votre application peut vérifier cela en appelant MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed().

Stratégie de limitation du transfert de données entre les applications et les emplacements de stockage des appareils ou du cloud

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

Remarque

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

Enregistrement sur un appareil ou un stockage cloud

L’API getIsSaveToLocationAllowedForOID permet à votre 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 votre application doit implémenter la getIsSaveToLocationAllowedForOID vérification, déterminez si votre application prend en charge la sortie des données en consultant le tableau suivant :

service Paramètre : SaveLocation Valeur d’énumération Cas d’usage OID associé
ONEDRIVE_FOR_BUSINESS L’application enregistre des données dans OneDrive. OID pour un compte utilisé à la fois pour l’authentification du service cloud et l’authentification Microsoft Entra. Si un tel compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
SHAREPOINT L’application enregistre des données dans Sharepoint. OID pour un compte utilisé à la fois pour l’authentification du service cloud et l’authentification Microsoft Entra. Si un tel compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
BOX Cette application enregistre des données dans Box. OID pour un compte utilisé à la fois pour l’authentification du service cloud et l’authentification Microsoft Entra. Si un tel compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
LOCAL L’application enregistre des données dans un emplacement de stockage externe sur l’appareil qui n’est pas le stockage privé de l’application. Le stockage externe n’est pas considéré comme un service cloud et doit donc toujours être utilisé avec un null paramètre oid.
PHOTO_LIBRARY L’application enregistre des données dans le stockage photo local Android. Le stockage de photos local Android n’est pas considéré comme un service cloud et doit donc toujours être utilisé avec un null paramètre oid.
ACCOUNT_DOCUMENT L’application enregistre des données dans un emplacement associé à un compte au sein de l’application et n’est pas l’un des emplacements cloud spécifiques spécifiés ci-dessus. *Cet emplacement doit être utilisé pour déterminer si les données peuvent être transmises entre les comptes au sein d’une application multi-identité.- OID pour un compte utilisé pour l’authentification Microsoft Entra. Si un tel compte n’existe pas ou si l’OID n’est pas connu, utilisez null.
OTHER L’application enregistre des données dans un emplacement qui n’est pas spécifié ci-dessus et qui ne répond pas aux critères pour ACCOUNT_DOCUMENT. n’est oid pas évalué pour cet emplacement et doit donc être null.

Les fichiers placés dans un 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 . vous n’avez pas besoin de vérifier getIsSaveToLocationAllowedForOID. SaveLocation.LOCAL Recherchez

  1. Fichiers enregistrés en dehors du stockage d’application privé.
  2. Fichiers téléchargés dans un stockage d’application privé qui ne sont pas nécessaires au fonctionnement de l’application (par exemple, l’utilisateur choisit délibérément 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 en cours d’enregistrement (pas nécessairement identique au compte propriétaire du document enregistré).

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

L’API getIsOpenFromLocationAllowedForOID permet à votre 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 votre application doit implémenter la getIsOpenFromLocationAllowedForOID vérification, déterminez si votre 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 pour un compte utilisé à la fois pour l’authentification du service cloud et l’authentification Microsoft Entra. Si un tel 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 pour un compte utilisé à la fois pour l’authentification du service cloud et l’authentification Microsoft Entra. Si un tel 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. Valeur null , car la caméra 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 emplacement de service cloud, un oid paramètre est attendu, car il indique la propriété.
Lors de l’ouverture d’un fichier à partir d’un stockage local, le propriétaire du fichier doit toujours être pris en compte, car la stratégie d’enregistrement sous du propriétaire du fichier peut ou non autoriser d’autres identités à ouvrir le fichier :
- Pour les fichiers marqués par l’identité,oid doit être l’identité du propriétaire du fichier.
- Pour les fichiers sans balise d’identité,oid doit être null.
PHOTO_LIBRARY L’application ouvre des données à partir du stockage local de photos Android. Le stockage de photos local Android n’est pas considéré comme un service cloud et doit donc toujours être utilisé avec un null paramètre oid.
ACCOUNT_DOCUMENT L’application ouvre des données à partir d’un emplacement associé à un compte au sein de l’application et qui n’est pas l’un des emplacements cloud spécifiques spécifiés ci-dessus. *Cet emplacement doit être utilisé pour déterminer si les données peuvent être transmises entre les comptes au sein d’une application multi-identité.- OID pour un compte utilisé pour l’authentification Microsoft Entra. Si un tel 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 qui n’est pas spécifié ci-dessus et qui ne répond pas aux critères pour ACCOUNT_DOCUMENT. n’est oid pas évalué pour cet emplacement et doit donc être null.

Remarque

Lors de la vérification de la stratégie d’ouverture, oid doit être l’OID du compte associé au fichier ou au service cloud en cours d’ouverture (pas nécessairement identique au compte qui ouvre le document).

Conseil

Par souci pratique, le Kit de développement logiciel (SDK) fournit la méthode AppPolicy.isOpenFromLocalStorageAllowed qui accepte un File paramètre pour un fichier dans le stockage local. Il s’agit de l’application de la stratégie, est fonctionnellement identique à l’appel AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) , sauf qu’il gère l’analyse du propriétaire du oid fichier à partir du File.

Boîte de dialogue bloquée de partage

Le Kit de développement logiciel (SDK) fournit une boîte de dialogue pour informer l’utilisateur qu’une action de transfert de données a été bloquée par la stratégie GAM.

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

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 publics n’est pas autorisé, votre application doit toujours permettre à l’utilisateur d’afficher les 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 respecter automatiquement la valeur « Bloquer les données d’organisation », qui est destinée à supprimer uniquement le contenu managé des notifications. Pour les applications à plusieurs identités, le SDK ne peut pas déterminer quelles notifications contiennent du contenu managé.

Si votre application affiche des notifications et qu’elle est multi-identité et/ou qu’elle souhaite respecter la valeur « Bloquer les données de l’organisation », elle doit vérifier la stratégie de restriction de notification 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 retournée NotificationRestriction a les valeurs suivantes :

NotificationRestriction Énumération Comportement attendu de l’application
BLOCKED L’application ne doit pas afficher de notifications 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 nécessaire.
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 Kit de développement logiciel (SDK) GAM fait le meilleur effort pour restreindre automatiquement les notifications pour les applications à identité unique uniquement.

Dans ce cas, BLOCK_ORG_DATA est traité de la même façon que BLOCKED et la notification ne s’affiche pas du tout.

Pour un contrôle plus précis, vérifiez la valeur des notifications d’application getNotificationRestriction et modifiez-les en conséquence.

Stratégie de protection des données de sauvegarde

Le SDK d’application Intune peut bloquer le chargement des données vers la fonctionnalité intégrée de sauvegarde et de restauration d’Android. Pour en savoir plus sur la sauvegarde et la restauration dans Android, consultez le guide de l’API Android et les modifications introduites dans Android S/12 ici : Modifier pour la sauvegarde et la restauration.

Sauvegarde automatique pour les applications

À partir d’Android M, Android a commencé à proposer 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 disponibles à partir d’Android, y compris la possibilité de définir des règles personnalisées en XML, avec des conseils d’intégration Intune spécifiques pour garantir l’application de la protection des données.

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 votre application ne nécessite pas de fonctionnalité complète de sauvegarde et de restauration, définissez sur android:allowBackupfalse. Dans ce cas, aucune autre action 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, définissez android:allowBackup sur true et effectuez les étapes supplémentaires suivantes :

  1. Si votre application n’utilise pas son propre personnalisé BackupAgent, utilisez le MAMBackupAgent par défaut pour autoriser les sauvegardes complètes automatiques 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 avez implémenté un personnalisé BackupAgentfacultatif, vous devez veiller à utiliser MAMBackupAgent ou MAMBackupAgentHelper. Consultez les sections suivantes. Envisagez de passer à l’utilisation de MAMDefaultBackupAgent d’Intune, décrite à l’étape 1, qui offre 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), vous devez définir l’attribut android:fullBackupContent sur true, false ou une ressource XML dans votre application.

  4. Ensuite, vous devez copier la valeur pour android:fullBackupContent dans la com.microsoft.intune.mam.FullBackupContent balise de métadonnées et pour les applications qui prennent en charge le nouveau format de configuration XML ajouté dans API 31, dans la com.microsoft.intune.mam.DataExtractionRules balise de 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 personnalisées BackupAgent et refuse les sauvegardes automatiques complètes, conformes à la stratégie 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 key/value Backup, vous devez utiliser un BackupAgentHelper ou un BackupAgent.

BackupAgentHelper

BackupAgentHelper est plus facile à implémenter que BackupAgent en termes de fonctionnalités Android natives et d’intégration gam Intune BackupAgentHelper permet au développeur d’inscrire 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. Suivez les étapes ci-dessous pour utiliser un BackupAgentHelper avec La gestion des applications mobiles Intune :

  1. Pour utiliser la sauvegarde multi-identité avec un BackupAgentHelper, suivez le guide Android sur l’extension de BackupAgentHelper.

  2. Faites en sorte que votre classe étende l’équivalent MAM de BackupAgentHelper, FileBackupHelper et SharedPreferencesBackupHelper.

Classe Android Équivalent GAM
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Le fait de suivre ces instructions aboutira à une sauvegarde et une restauration multi-identités réussies.

BackupAgent

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

Intégrer gam :

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

  2. Faites en charge votre classe d’étendre MAMBackupAgent.

Sauvegarde multi-identité :

  1. Avant de commencer votre sauvegarde, vérifiez que la sauvegarde des fichiers ou des mémoires tampons de données que vous prévoyez de sauvegarder est bien autorisée par l’administrateur informatique dans les scénarios multi-identités. Utilisez isBackupAllowed dans MAMFileProtectionManager et MAMDataProtectionManager pour le déterminer. Si la sauvegarde du fichier ou de la mémoire tampon de données n’est pas autorisée, vous ne devez pas l’inclure dans votre sauvegarde.

  2. À un moment donné de votre sauvegarde, si vous souhaitez sauvegarder les identités des fichiers que vous avez archivés à l’étape 1, vous devez appeler backupMAMFileIdentity(BackupDataOutput data, File … files) avec les fichiers à partir desquels vous envisagez d’extraire des données. Cela 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é : Le guide de sauvegarde des données spécifie un algorithme général pour la restauration des données de votre application et fournit un exemple de code dans la section Extension de BackupAgent . Pour que la restauration à plusieurs identités réussisse, vous devez suivre la structure générale fournie dans cet exemple de code avec une attention particulière aux éléments suivants :

  1. Vous devez utiliser une while(data.readNextHeader())boucle * pour passer par 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 effectuer cette étape, vos restaurations risquent de ne pas réussir.

  3. Évitez de retourner des entités de sauvegarde dans la while(data.readNextHeader())construction *, car les entités que nous écrivons automatiquement seront perdues.

  • data est le nom de la variable locale pour mamBackupDataInput passé à votre application lors de la restauration.

Restrictions de capture d’écran personnalisées

Si votre application contient une fonctionnalité de capture d’écran personnalisée qui contourne la restriction de Windowniveau FLAG_SECURE Android, vous devez vérifier la stratégie de capture d’écran avant d’autoriser l’accès complet à 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 AppPolicy.getIsScreenCaptureAllowed().

Remarque

Si votre application ne contient aucune fonctionnalité de capture d’écran personnalisée ou tierce, vous n’êtes pas obligé d’effectuer une action pour restreindre les captures d’écran. La stratégie de capture d’écran est automatiquement appliquée au Window niveau de toutes les applications intégrées GAM. Toutes les tentatives effectuées par le système d’exploitation ou une autre application pour capturer un Window dans votre application seront bloquées en fonction des besoins. Par exemple, si un utilisateur tente de capturer l’écran de votre application via la capture d’écran intégrée d’Android ou les fonctionnalités d’enregistrement d’écran, la capture est automatiquement restreinte sans participation de votre application.

Prise en charge de l’autorité de certification App Protection

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

Remarque

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

Gérer la non-conformité avec MSAL

Lors de l’acquisition d’un jeton pour un compte, la bibliothèque MSAL peut retourner ou lever un pour indiquer une MsalIntuneAppProtectionPolicyRequiredException non-conformité avec la gestion des stratégies de protection des applications. Des paramètres supplémentaires peuvent être extraits de l’exception pour les utiliser pour corriger la conformité (voir MAMComplianceManager). Une fois la correction réussie, l’application peut réessayer l’acquisition de jetons via MSAL.

MAMComplianceManager

L’interface MAMComplianceManager est utilisée lorsque l’erreur requise par la stratégie est reçue de MSAL. Il contient la méthode [remediateCompliance] qui doit être appelée pour tenter de placer l’application dans un état conforme. Une référence à peut MAMComplianceManager être obtenue comme suit :

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

// make use of mgr

L’instance MAMComplianceManager retourné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 est appelée pour tenter de placer l’application sous gestion afin de satisfaire aux conditions d’octroi du jeton demandé par l’ID Microsoft Entra. Les quatre premiers paramètres peuvent être extraits de l’exception reçue par la méthode MSAL AuthenticationCallback.onError() (voir l’exemple de code ci-dessous). Le dernier paramètre est une valeur booléenne qui contrôle si une expérience utilisateur est affichée pendant la tentative de conformité.

remediateCompliance affiche une boîte de dialogue de progression de blocage simple pour que les applications n’ont pas besoin d’afficher l’expérience utilisateur personnalisée pendant cette opération. Cette boîte de dialogue s’affiche uniquement pendant que la correction de conformité est en cours. il n’affiche pas le résultat final. Votre application peut inscrire un récepteur 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 d’état de conformité.

remediateCompliance() peut lancer une inscription GAM dans le cadre de l’établissement de la conformité. L’application peut recevoir une notification d’inscription si elle a inscrit un récepteur de notification pour les notifications d’inscription. La méthode de l’application inscrite MAMServiceAuthenticationCallback est acquireToken() appelée pour obtenir un jeton pour l’inscription. acquireToken() sera appelé avant que l’application ait acquis son propre jeton, de sorte que toutes les tâches de comptabilité ou de création de compte effectuées par l’application après une acquisition de jeton réussie peuvent ne pas encore avoir été effectuées. Dans ce cas, le rappel doit être en mesure d’acquérir un jeton.

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

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

Remarque

L’acquisition de jetons en mode silencieux sera toujours possible dans acquireToken() , car l’utilisateur aura déjà été guidé pour installer le répartiteur et inscrire l’appareil avant la réception de l’exception MsalIntuneAppProtectionPolicyRequiredException . Le répartiteur dispose donc d’un jeton d’actualisation valide dans son cache, ce qui permet la réussite de l’acquisition silencieuse du jeton demandé.

Voici un exemple de réception de l’erreur requise par la stratégie dans la AuthenticationCallback.onError() méthode et d’appel de MAMComplianceManager pour gérer 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 d’état de conformité

Si l’application s’inscrit pour les notifications de type COMPLIANCE_STATUS, un MAMComplianceNotification est envoyé afin d’informer l’application de l’état final de la tentative de correction de conformité. Pour plus d’informations sur l’inscription, consultez S’inscrire aux notifications à partir 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é en tant que valeur de l’énumération [MAMCAComplianceStatus].

Code d'état Explication
UNKNOWN L’état est inconnu. Cela peut indiquer une raison d’échec inattendue. Vous trouverez des informations supplémentaires dans les journaux du portail d’entreprise.
COMPLIANT La correction de la conformité a réussi et l’application est désormais conforme à la stratégie. L’acquisition de jeton MSAL doit faire l’objet d’une nouvelle tentative.
NOT_COMPLIANT La tentative de correction de la conformité a échoué. L’application n’est pas conforme et l’acquisition de jeton MSAL ne doit pas faire l’objet d’une nouvelle tentative tant que la condition d’erreur n’est pas corrigée. Des informations d’erreur supplémentaires sont envoyées avec MAMComplianceNotification.
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 des informations supplémentaires dans les journaux du portail d’entreprise.
NETWORK_FAILURE Une erreur s’est produite lors de la connexion au service Intune. L’application doit réessayer d’acquérir des jetons lorsque la connexion réseau est restaurée.
CLIENT_ERROR La tentative de correction de la conformité a échoué pour une raison quelconque liée au client. Par exemple, aucun jeton ou utilisateur incorrect. Des informations d’erreur supplémentaires sont envoyées avec MAMComplianceNotification.
PENDING La tentative de correction de la conformité a échoué, car la réponse d’état n’avait pas encore été reçue du service lorsque la limite de temps a été dépassée. L’application doit réessayer son acquisition de jetons ultérieurement.
COMPANY_PORTAL_REQUIRED Le portail d’entreprise doit être installé sur l’appareil pour que la correction de la conformité réussisse. Si le portail d’entreprise est déjà installé sur l’appareil, l’application doit être redémarrée. Dans ce cas, une boîte de dialogue s’affiche pour demander à l’utilisateur de redémarrer l’application.

Si l’état de conformité est MAMCAComplianceStatus.COMPLIANT, l’application doit réinitialiser 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() retournent des chaînes localisées que l’application peut afficher à l’utilisateur final s’il le souhaite. La plupart des cas d’erreur ne peuvent pas être corrigés par l’application. Par conséquent, pour le cas général, il peut être préférable d’échouer la création ou la connexion du compte et d’autoriser l’utilisateur à réessayer ultérieurement.

Si une défaillance est persistante, les journaux du portail d’entreprise peuvent aider à en déterminer la cause. L’utilisateur final peut envoyer les journaux. Pour plus d’informations, consultez Charger et envoyer des journaux d’e-mail.

Voici un exemple d’inscription d’un récepteur à l’aide d’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

Le destinataire de notification doit être inscrit avant d’appeler remediateCompliance() pour éviter une condition de concurrence qui pourrait entraîner l’absence de la notification.

Déclaration de prise en charge de l’autorité de certification App Protection

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 d’application. Pour ce faire dans votre application MSAL, générez votre client public à l’aide des 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 que vous avez terminé la procédure ci-dessus, passez à Validation de l’autorité de certification De protection des applications ci-dessous.

Notes d’implémentation

Remarque

La méthode de l’application MAMServiceAuthenticationCallback.acquireToken() doit passer false pour forceRefresh l’indicateur à 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 passer false pour le paramètre showUX à remediateCompliance(). Vous devez vous assurer que vous affichez votre expérience utilisateur et que vous inscrivez d’abord votre écouteur de notification avant d’appeler remediateCompliance(). Cela empêchera une condition de concurrence dans laquelle la notification pourrait être manquée en cas remediateCompliance() d’échec très rapide. Par exemple, la onCreate() méthode ou onMAMCreate() d’une sous-classe Activity est l’endroit idéal pour inscrire l’écouteur de notification, puis appeler remediateCompliance(). Les paramètres de remediateCompliance() peuvent être passés à votre expérience utilisateur en tant qu’extras d’intention. Lorsque la notification d’état de conformité est reçue, vous pouvez afficher le résultat ou simplement terminer l’activité.

Remarque

remediateCompliance() inscrit 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 nouvelles tentatives d’inscription en arrière-plan.

S’inscrire aux notifications à partir du KIT de développement logiciel (SDK)

Le guide du KIT de développement logiciel (SDK) d’application Intune a déjà abordé plusieurs scénarios dans lesquels votre application peut être tenue de s’inscrire pour recevoir des notifications à partir du SDK, par exemple :

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 a une seule fonction, getType(), qui retourne une énumération MAMNotificationType .

La plupart des notifications sont MAMUserNotification, qui fournissent des informations spécifiques à une seule identité. 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 MAMUserNotificationdavantage , qui contiennent les résultats des tentatives d’inscription d’un utilisateur/appareil auprès du service GAM et le résultat pour les tentatives de correction de la conformité pour l’autorité de certification App Protection, respectivement.

Type de notification Classe de notification Motif de la notification Applicabilité Conseils pour la gestion Informations sur le thread
COMPLIANCE_STATUS MAMComplianceNotification Retourne le résultat d’une tentative de correction de conformité. Les applications qui implémentent l’autorité de certification App Protection doivent gérer cela. - Indéterministe
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Retourne le résultat d’une tentative d’inscription. Toutes les applications recevront ce message. - Indéterministe
MANAGEMENT_REMOVED MAMUserNotification L’application est sur le point de devenir non gérée. Les applications qui utilisent MAMDataProtectionManager doivent gérer cela. Voir MANAGEMENT_REMOVED ci-dessous. 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 d’application et mettent en cache les données de configuration d’application doivent gérer cela. Les applications doivent invalider et mettre à jour toutes les données de configuration d’application mises en cache. Indéterministe
REFRESH_POLICY MAMUserNotification La stratégie de protection des applications a peut-être changé. Les applications qui mettez en cache une stratégie de protection des applications doivent gérer cela. Les applications doivent invalider et mettre à jour toutes les données de stratégie de protection des applications mises en cache. Indéterministe
WIPE_USER_DATA MAMUserNotification La réinitialisation est sur le point de se produire(*). Les applications qui utilisent MAMDataProtectionManager doivent gérer ce ouWIPE_USER_AUXILIARY_DATA . Consultez Réinitialisation sélective. Jamais sur le thread d’interface utilisateur
WIPE_USER_AUXILIARY_DATA MAMUserNotification La réinitialisation est sur le point de se produire(*). Seules les applications multi-identités recevront cela.
Les applications qui utilisent MAMDataProtectionManager doivent gérer ce ouWIPE_USER_DATA .
Consultez Réinitialisation sélective. Jamais sur le thread d’interface utilisateur
WIPE_COMPLETED MAMUserNotification La réinitialisation est terminée. Toujours facultatif. Remis après WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA. *Si l’application signale un échec à partir de son gestionnaire pour WIPE_USER_DATA ou WIPE_USER_AUXILIARY_DATA, cette notification ne sera pas envoyée.- Jamais sur le thread d’interface utilisateur

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

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

Avertissement

Une application ne doit jamais s’inscrire WIPE_USER_DATA aux notifications et .WIPE_USER_AUXILIARY_DATA

MANAGEMENT_REMOVED

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

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

Lorsque le Kit de développement logiciel (SDK) appelle le récepteur 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 mémoires tampons de données protégées) appartenant à l’application. Les fichiers situés dans des emplacements publics sur la carte sdcard qui n’appartiennent pas directement à l’application (par exemple, les dossiers Documents ou Télécharger) ne sont pas déchiffrés.

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

  • L’application ayant toujours accès aux clés de chiffrement, 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 retourné, il n’a plus accès aux clés de chiffrement.

Implémentation de MAMNotificationReceiver

Pour s’inscrire aux notifications à partir du SDK, votre application doit créer un MAMNotificationReceiver et l’inscrire auprès de MAMNotificationReceiverRegistry.

Pour inscrire 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 est appelée individuellement pour chaque notification reçue, et elle doit retourner un boolean. En règle générale, cette méthode doit toujours retourner true, sauf si votre application a rencontré un échec de réponse à une notification.

Comme avec d’autres types de récepteurs Android, votre application offre une certaine flexibilité dans la gestion des notifications :

  • Il peut créer des implémentations MAMNotificationReceiver distinctes pour des types de notification distincts (décrits ci-dessous). Dans ce cas, veillez à inscrire chaque implémentation et chaque type de notification séparément.
  • Il peut utiliser une implémentation MAMNotificationReceiver unique qui contient une logique pour répondre à plusieurs types de notification 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 dans le même type de notification.

Conseil

Il est sûr de bloquer l’entrée, MAMNotificationReceiver.onReceive car son rappel n’est pas en cours d’exécution sur le thread d’interface utilisateur.

Thèmes personnalisés

Un thème personnalisé peut être fourni au Kit de développement logiciel (SDK) de l’application Intune . ce thème personnalisé sera appliqué à 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 sdk par défaut est utilisé.

Fourniture d’un thème personnalisé

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

MAMThemeManager.setAppTheme(R.style.AppTheme);

Dans l’exemple ci-dessus, vous devez remplacer par R.style.AppTheme le thème de style que vous souhaitez que le SDK applique.

Gestion des certificats racines approuvés

Si votre 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 applications et sites web internes, le SDK d’application Intune a ajouté la prise en charge de la gestion des approbations de certificats à l’aide des classes d’API MAMTrustedRootCertsManager et MAMCertTrustWebViewClient.

Remarque

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

La gestion des certificats racines approuvés prend en charge les éléments suivants :

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • WebView

Configuration requise

Remarque

La gestion des certificats racines approuvés peut être utilisée indépendamment de la passerelle VPN Microsoft Tunnel, mais vous devez utiliser une licence Microsoft MAM Tunnel pour l’utiliser.

Utilisation de certificats racines approuvés 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 approuvés Intune fournis via la stratégie de configuration d’application comme option de secours si les magasins de certificats racines approuvés de l’appareil ne contiennent pas les certificats racines approuvés requis pour établir une connexion sécurisée aux ressources locales. De cette façon, l’application peut utiliser des certificats d’appareil et Intune pour vérifier des connexions et des communications sécurisées 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 la sécurité réseau. La gestion des certificats racines approuvés respecte cette sécurité supplémentaire en vérifiant si le xml de configuration de la sécurité réseau de l’application dispose de l’une des fonctionnalités suivantes :

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

Remarque

Pour en savoir plus sur la configuration de la sécurité réseau Android, consultez : Configuration de la sécurité réseau

Si l’un de ces éléments s’applique à un domaine dont l’approbation est vérifiée, la gestion des certificats racines approuvés ignore les vérifications d’approbation personnalisées pour ce domaine et laisse uniquement les gestionnaires d’approbation 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 SSLContext objet qui utilise des certificats racines approuvés pour l’identité spécifiée et le protocole SSL/TLS spécifié. L’objet retourné SSLContext à partir de cette classe est déjà initialisé correctement avec X509TrustManager les objets qui utilisent les certificats racines approuvés combinés de l’appareil et du service GAM.
  • createSSLSocketFactoryForOID(String oid, String protocol): crée un SSLSocketFactory objet qui utilise des certificats racines approuvés pour l’identité spécifiée et le protocole SSL/TLS spécifié. L’objet retourné 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 approuvés combinés de l’appareil et du service GAM pour l’identité spécifiée.

Remarque

Le oid paramètre est censé être l’ID utilisateur (OID) Microsoft Entra pour un utilisateur particulier exécutant l’application. Dans le cas où l’identificateur de l’utilisateur est inconnu au préalable, une valeur null peut être transmise et GAM tentera de découvrir l’identité correcte à partir du thread ou du processus dans lequel ces API sont appelées. L’identité doit être définie correctement sur le processus ou le thread pour que mam découvre l’identité. Pour en savoir plus sur la définition de l’identité active sur un processus ou un thread, visitez : Étape 5 : Identités multiples

Remarque

Lorsque le protocol paramètre n’est pas fourni, le protocole SSL/TLS le plus élevé pris en charge sur la plateforme est utilisé.

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 d’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.WebViewClient Android qui permet de gérer l’erreur android.net.http.SslError.SSL_UNTRUSTED SSL dans WebView. Pour gérer l’erreur, la classe utilise des certificats racines approuvés configurés dans Intune et reçus du service GAM pour vérifier 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 comportement par défaut hérité de la superclasse est appelé. Lorsque vous utilisez cette classe, vous devez créer une instance de celle-ci, puis appeler 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
...

Critères de sortie

Reportez-vous à Test rapide avec changement de stratégie pour faciliter les tests.

Validation de l’enregistrement dans /de l’ouverture à partir des restrictions

Ignorez si vous n’avez pas implémenté de stratégie pour limiter le transfert de données entre les applications et les emplacements de stockage d’appareils ou cloud.

Refamiliez-vous avec chaque scénario où 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.

Par souci de simplicité, 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 Entreprise à partir d’un emplacement unique au sein de l’application. Toutefois, vous devez valider chaque combinaison : chaque emplacement d’enregistrement pris en charge par rapport à chaque emplacement que votre application permet d’enregistrer des données, et chaque emplacement ouvert pris en charge pour chaque emplacement où votre application autorise l’ouverture de données.

Pour ces tests, installez votre application et le portail d’entreprise Intune . connectez-vous avec un compte managé avant de commencer le test. De plus :

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

Validation des restrictions de notification

Ignorez si vous n’avez pas implémenté la 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. Notifications qui ne contiennent pas de données de compte.
  2. Notifications qui contiennent des données appartenant à un compte managé.
  3. Notifications qui contiennent des données appartenant à un compte non managé.

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

Les restrictions de notification peuvent être validées en déclenchant les trois types de notifications avec différentes valeurs de stratégie configurées.

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

Scénario Conditions préalables Étapes
Contenu complet bloqué Stratégie « Notifications de données d’organisation » définie sur « Bloquer » - Déclenchez votre application pour déclencher une notification sans données de compte.
- Vérifiez que cette 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 cette 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 cette notification n’affiche aucun contenu.
Contenu partiel bloqué Stratégie « Notifications de données d’organisation » définie sur « Bloquer les données de l’organisation » - Déclenchez votre application pour déclencher une notification sans données de compte.
- Vérifiez que cette 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 cette notification réacte le contenu du compte managé.
- Déclenchez votre application pour déclencher une notification avec les données du compte non géré.
- Vérifiez que cette notification affiche son contenu complet.
Aucun contenu bloqué Stratégie « Notifications de données d’organisation » définie sur « Autoriser »

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

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

Familiarisez-vous avec le contenu (fichiers et/ou paires clé-valeur) que votre application a configuré pour la sauvegarde. Vous devez vérifier que seul le contenu attendu fait partie de la restauration. Le contenu supplémentaire de 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 managé avant de commencer le test. Si votre application est multi-identité, connectez-vous également à votre application avec un compte non managé.

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

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

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

Si votre application dispose d’une fonctionnalité qui contourne le niveau FLAG_SECUREd’AndroidWindow, vérifiez 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 managé 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 à l’emplacement dans votre application qui tire parti de votre code de FLAG_SECURE personnalisé.
- Tentative d’utilisation de 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 à l’emplacement dans votre application qui tire parti de votre code de FLAG_SECURE personnalisé.
- Tentative d’utilisation de cette fonctionnalité.
- Vérifiez que la fonctionnalité est autorisée.

Validation de l’autorité de certification App Protection

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

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

Étapes de test :

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

Validation des récepteurs de notification

Ignorez si vous n’avez pas implémenté s’inscrire aux notifications à partir du SDK.

Les étapes de validation dépendent du type 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é simplement en vous connectant d’abord à votre application avec un compte ciblé avec une stratégie de protection des applications.

REFRESH_APP_CONFIG et REFRESH_POLICY peuvent être déclenchés en mettant à jour la stratégie App Configuration et la stratégie de protection des applications respectives ciblées sur votre compte de test et en attendant que le KIT de développement logiciel (SDK) reçoive la stratégie mise à jour.

Conseil

Pour accélérer ce processus , consultez Tests rapides avec la modification de la stratégie.

MANAGEMENT_REMOVED, WIPE_USER_DATA, , WIPE_COMPLETEDWIPE_USER_AUXILIARY_DATAles notifications peuvent toutes être déclenchées en émettant une réinitialisation sélective à partir de Microsoft Intune.

Validation des thèmes personnalisés

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

La prise en charge des thèmes personnalisés peut être validée en inspectant les couleurs dans les boîtes de dialogue du SDK. La boîte de dialogue la plus simple à vérifier est l’écran du code CONFIDENTIEL MAM.

Conditions préalables:

  • Définissez la stratégie du compte managé comme suit :
    • « Code confidentiel pour l’accès » à « Obligatoire ».
  • Installez votre application et le portail d’entreprise Intune.

Étapes de test :

  1. Lancez votre application et connectez-vous avec le compte de test.
  2. Vérifiez que l’écran du code PIN MAM s’affiche et qu’il a un thème basé sur le thème personnalisé que vous avez fourni au SDK.

Étapes suivantes

Si vous avez suivi ce guide dans l’ordre et que vous avez rempli tous les critères de sortie ci-dessus, félicitations, votre application est désormais 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 à l’application, Étape 5 : Multi-Identité et Étape 6 : Configuration d’application, et que vous ne savez pas si votre application doit prendre en charge ces fonctionnalités, passez en revue les décisions clés pour l’intégration du SDK.

La protection des applications est désormais un scénario de base pour votre application. Continuez à vous référer à ce guide et à l’annexe lorsque vous continuez à développer votre application.