Бөлісу құралы:


Пакет SDK для приложений Intune для Android — функции участия в приложениях

Пакет SDK для приложений Microsoft Intune для Android позволяет включать политики защиты приложений Intune (также известные как политики ПРИЛОЖЕНИЙ или MAM) в собственное приложение Android для Java или Kotlin. Приложение, управляемое Intune, интегрировано с пакетом SDK для приложений Intune. Администраторы Intune могут легко развертывать политики защиты приложений в приложении, управляемом Intune, когда Intune активно управляет приложением.

Примечание.

Это руководство разделено на несколько отдельных этапов. Для начала ознакомьтесь с разделом Планирование интеграции.

Этап 7. Функции участия в приложениях

Цели этапа

  • Узнайте о различных функциях участия в приложениях, предлагаемых пакетом SDK для приложений Intune.
  • Интегрируйте функции участия в приложении, относящиеся к вашему приложению и пользователям.
  • Протестируйте интеграцию этих функций.

Что такое "Функции участия в приложениях"?

Этот процесс интеграции пакета SDK пытается свести к минимуму объем кода для конкретного приложения, который необходимо написать разработчикам. Успешно завершив предыдущие этапы интеграции пакета SDK, приложение теперь может применить большинство параметров политики защиты приложений, таких как шифрование файлов, ограничения на копирование и вставку, блокировка снимка экрана и ограничения на передачу данных.

Однако существуют некоторые параметры, для которых требуется правильное применение кода для конкретного приложения. они называются функциями участия в приложениях. Как правило, пакет SDK не имеет достаточного контекста о коде вашего приложения или сценарии конечного пользователя для автоматического применения этих параметров, поэтому разработчики могут соответствующим образом вызывать API пакета SDK.

Функции участия в приложении не обязательно являются необязательными. В зависимости от существующих функций приложения эти функции могут потребоваться. Дополнительные сведения см. в разделе Ключевые решения для интеграции пакета SDK .

На предыдущих этапах этого руководства уже было описано несколько функций участия приложений:

В остальной части этого руководства описывается оставшийся набор функций участия в приложении:

  • Применяйте политику, ограничивающую сохранение и открытие файлов из локального или облачного хранилища.
  • Применение политики, ограничивающей содержимое в уведомлениях.
  • Принудительное применение политики, защищающей данные резервного копирования.
  • Примените политику ограничения захвата экрана (если в приложении есть код пользовательского захвата экрана).
  • Поддержка ЦС защиты приложений.
  • Зарегистрируйтесь для получения уведомлений из пакета SDK.
  • Применение пользовательской тем для приложений.
  • Используйте доверенные сертификаты из Intune, чтобы обеспечить цепочку доверия к локальным конечным точкам.

Основные сведения о функции участия в приложениях

Интерфейс AppPolicy содержит множество методов, которые информируют приложение о том, разрешены ли определенные действия.

Большинство функций участия в приложениях включают:

  • Определение правильного места в коде приложения, чтобы проверить, разрешено ли действие.
  • AppPolicy Вызов метода для проверки допустимости действия на основе настроенной в настоящее время политики.
  • В зависимости от результата можно разрешить выполнение действия или изменить поведение приложения при блокировке действия.

Чтобы получить AppPolicy экземпляр, используйте один из методов MAMPolicyManager , например getPolicy(final Context context) или getPolicyForIdentityOID(final String oid).

Информационные методы в AppPolicy

Не все методы в AppPolicy привязаны к функции участия в приложении. Некоторые методы являются информационными, предоставляя вашему приложению данные о том, какие политики настроены в настоящее время, даже если эти политики автоматически применяются пакетом SDK. Эти методы существуют для предоставления приложению возможностей для предоставления пользовательского интерфейса при настройке определенных политик.

Пример. Определение блокировки снимков экрана

Если в приложении есть элемент управления, который позволяет пользователю делать снимок экрана, может потребоваться отключить или скрыть этот элемент управления, если политика защиты приложений заблокирована.

Приложение может проверить это, вызвав .MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()

Политика ограничения передачи данных между приложениями и устройствами или облачными хранилищами

Многие приложения позволяют конечному пользователю сохранять или открывать данные из локального файлового хранилища или облачных служб хранилища. Пакет SDK для приложений Intune позволяет ИТ-администраторам защищаться от входящего трафика и утечки данных, ограничивая, где приложения могут сохранять данные и открывать их.

Примечание.

Если ваше приложение позволяет сохранять данные в личных или облачных расположениях непосредственно из приложения или позволяет открывать данные непосредственно в приложении, необходимо реализовать эту функцию участия в пакете SDK для приложений Intune, чтобы ит-администраторы могли заблокировать это сохранение или открытие.

Сохранение на устройстве или в облачное хранилище

getIsSaveToLocationAllowedForOID API позволяет приложению узнать, разрешено ли сохранение в определенных расположениях для определенного удостоверения на основе настроенной политики:

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

Чтобы определить, должно ли приложение реализовать getIsSaveToLocationAllowedForOID проверку, определите, поддерживает ли приложение исходящий трафик данных, просмотрите следующую таблицу:

service Параметр: SaveLocation перечисление значения Вариант использования Связанный OID
ONEDRIVE_FOR_BUSINESS Приложение сохраняет данные в OneDrive. OID для учетной записи, которая используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
SHAREPOINT Приложение сохраняет данные в SharePoint. OID для учетной записи, которая используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
BOX Это приложение сохраняет данные в Box. OID для учетной записи, которая используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
LOCAL Приложение сохраняет данные во внешнее хранилище на устройстве, которое не является частным хранилищем приложения. Внешнее хранилище не считается облачной службой и поэтому всегда должно использоваться с параметром null oid.
PHOTO_LIBRARY Приложение сохраняет данные в локальное хранилище фотографий Android. Локальное хранилище фотографий Android не считается облачной службой, поэтому его всегда следует использовать с параметром null oid.
ACCOUNT_DOCUMENT Приложение сохраняет данные в расположение, связанное с учетной записью в приложении и не является одним из определенных облачных расположений, указанных выше. *Это расположение должно использоваться для определения возможности передавать данные между учетными записями в приложении с несколькими удостоверениями.- OID для учетной записи, используемой для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
OTHER Приложение сохраняет данные в расположение, которое не указано выше и не соответствует критериям для ACCOUNT_DOCUMENT. Объект oid не вычисляется для этого расположения и поэтому должен иметь значение null.

Файлы, размещенные в частном хранилище приложений, необходимые для работы приложения или временно загруженные для отображения, всегда разрешены; вам не нужно проверять .getIsSaveToLocationAllowedForOID Проверьте наличие SaveLocation.LOCAL

  1. Файлы, сохраненные за пределами частного хранилища приложений.
  2. Файлы, скачанные в частное хранилище приложений, которые не нужны для работы приложения (например, пользователь намеренно выбирает скачивание на устройство).

Примечание.

При проверке политики сохранения должен быть идентификатором OID учетной записи, связанной с облачной службой, oidв которой сохраняется (не обязательно совпадает с учетной записью, в которой хранится документ).

Открытие данных из локального или облачного хранилища

API getIsOpenFromLocationAllowedForOID позволяет приложению узнать, разрешено ли открытие из определенных расположений для заданного удостоверения на основе настроенной политики:

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

Чтобы определить, должно ли приложение реализовать getIsOpenFromLocationAllowedForOID проверку, определите, поддерживает ли ваше приложение входящий трафик данных, просмотрите следующую таблицу:

location Параметр: OpenLocation перечисление значения Вариант использования Связанный OID
ONEDRIVE_FOR_BUSINESS Приложение открывает данные из OneDrive. OID для учетной записи, которая используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
SHAREPOINT Приложение открывает данные из SharePoint. OID для учетной записи, которая используется как для проверки подлинности облачной службы, так и для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
CAMERA Приложение открывает данные с камеры. Значение null , так как камера устройства не является облачной службой.
LOCAL Приложение открывает данные из внешнего хранилища на устройстве, которое не является частным хранилищем приложения. Хотя внешнее хранилище не является расположением облачной службы, oid ожидается, что параметр указывает на владение.
При открытии файла из локального хранилища всегда следует учитывать владельца файла, так как политика сохранения файла может разрешать или не разрешать другим удостоверениям открывать файл:
- Для файлов oidс тегами удостоверений должно быть удостоверением владельца файла.
- Для файлов без тегаoid удостоверения значение должно иметь значение null.
PHOTO_LIBRARY Приложение открывает данные из локального хранилища фотографий Android. Локальное хранилище фотографий Android не считается облачной службой, поэтому его всегда следует использовать с параметром null oid.
ACCOUNT_DOCUMENT Приложение открывает данные из расположения, которое связано с учетной записью в приложении и не является одним из определенных облачных расположений, указанных выше. *Это расположение должно использоваться для определения возможности передавать данные между учетными записями в приложении с несколькими удостоверениями.- OID для учетной записи, используемой для проверки подлинности Microsoft Entra. Если такая учетная запись не существует или OID не известна, используйте null.
OTHER Приложение открывает данные из расположения, которое не указано выше и не соответствует критериям для ACCOUNT_DOCUMENT. Объект oid не вычисляется для этого расположения и поэтому должен иметь значение null.

Примечание.

При проверке политики открытия должен быть идентификатором учетной записи, связанной с файлом или облачной службой, oidиз которой открывается (не обязательно совпадает с учетной записью, открывающей документ).

Совет

Для удобства пакет SDK предоставляет метод AppPolicy.isOpenFromLocalStorageAllowed , который принимает File параметр для файла в локальном хранилище. Это условия принудительного применения политики функционально идентично вызову AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid) , за исключением того, что он обрабатывает синтаксический анализ владельца oid файла из File.

Диалоговое окно "Общий доступ заблокирован"

Пакет SDK предоставляет диалоговое окно для уведомления пользователя о том, что действие передачи данных было заблокировано политикой MAM.

Диалоговое окно должно отображаться для пользователя всякий раз getIsSaveToLocationAllowedForOID , когда вызов API или getIsOpenFromLocationAllowedForOID приводит к блокировке действия сохранения или открытия. Диалоговое окно отображает универсальное сообщение и вернется к вызову Activity при закрытии.

Чтобы отобразить диалоговое окно, добавьте следующий код:

MAMUIHelper.showSharingBlockedDialog(currentActivity)

Разрешить общий доступ к файлам

Если сохранение в общедоступных хранилищах запрещено, приложение по-прежнему должно разрешать пользователю просматривать файлы, скачивая их в частное хранилище приложения и открывая их с помощью средств выбора системы.

Политика ограничения содержимого в уведомлениях

Для приложений с одним удостоверением поведение пакета SDK для приложений Intune по умолчанию будет пытаться заблокировать все уведомления, когда политика защиты приложений ограничивает уведомления.

Поведение пакета SDK по умолчанию ограничено. Пакет SDK не может автоматически учитывать значение "Блокировать данные организации", которое предназначено для удаления только управляемого содержимого из уведомлений. Для приложений с несколькими удостоверениями пакет SDK не может определить, какие уведомления содержат управляемое содержимое.

Если ваше приложение отображает уведомления с несколькими удостоверениями и (или) хочет учитывать значение "Блокировать данные организации", оно должно проверить политику ограничения уведомлений для учетной записи, связанной с уведомлением, перед отображением уведомления.

Чтобы определить, применяется ли политика, выполните следующий вызов:

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

Возвращаемое перечисление NotificationRestriction имеет следующие значения:

NotificationRestriction Перечисление Ожидаемое поведение приложения
BLOCKED Приложение не должно отображать уведомления для учетной записи, связанной с этой политикой. Для приложений с одним удостоверением пакет SDK для приложений Intune автоматически блокирует все уведомления, и дополнительный код не требуется.
BLOCK_ORG_DATA Приложение должно отображать измененное уведомление, которое не содержит данные организации.
UNRESTRICTED Приложение должно отображать все уведомления.

Если приложение не вызывает getNotificationRestrictionдолжным образом , пакет SDK MAM приложит все усилия для автоматического ограничения уведомлений только для приложений с одним удостоверением.

В этом случае обрабатывается так же, BLOCK_ORG_DATA как BLOCKED и уведомление не будет отображаться вообще.

Для более точного управления проверьте значение getNotificationRestriction и измените уведомления приложений соответствующим образом.

Политика защиты данных резервного копирования

Пакет SDK для приложений Intune может блокировать передачу данных во встроенную функцию резервного копирования и восстановления Android. Дополнительные сведения о резервном копировании и восстановлении в Android см. в руководстве по API Android и изменениях, внесенных в Android S/12, здесь: Изменение резервного копирования и восстановления.

Автоматическое резервное копирование для приложений

Начиная с Android M, Android начала предлагать автоматические полные резервные копии на Google Диск для приложений, независимо от целевого API приложения.

Intune позволяет использовать все функции автоматического резервного восстановления, доступные в Android, включая возможность определения пользовательских правил в XML, а также конкретные рекомендации по интеграции Intune, чтобы обеспечить защиту данных.

Настройка поведения резервного копирования в манифесте приложения

По умолчанию для параметра задано значение true, android:allowBackup как описано в разделе Включение и отключение резервного копирования.

Если приложению не требуется полная функция резервного копирования и восстановления, задайте значение android:allowBackupfalse. В этом случае никаких дальнейших действий не требуется, и "корпоративные" данные останутся в приложении.

Если приложению требуются функции полного резервного копирования и восстановления, установите значение android:allowBackuptrue и выполните следующие дополнительные действия.

  1. Если в приложении не используется собственный пользовательский параметр BackupAgent, используйте MAMBackupAgent по умолчанию, чтобы разрешить автоматическое полное резервное копирование, соответствующее политике Intune. Поместите в манифест приложения следующее:

    <application
    ...
      android:fullBackupOnly="true"
      android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent"
      ...>
      </application>
    
  2. [Необязательно] Если вы реализовали необязательный пользовательский BackupAgentобъект , необходимо обязательно использовать MAMBackupAgent или MAMBackupAgentHelper. См. следующие разделы. Рассмотрите возможность переключения на использование MAMDefaultBackupAgent intune, описанного в шаге 1, который обеспечивает простое резервное копирование на Android M и более поздних версий.

  3. Когда вы решите, какой тип полной резервной копии должно получать приложение (нефильтрованный, отфильтрованный или нет), необходимо задать для атрибута android:fullBackupContent значение true, false или XML-ресурс в приложении.

  4. Затем необходимо скопировать значение для android:fullBackupContent в com.microsoft.intune.mam.FullBackupContent тег метаданных, а для приложений, поддерживающих новый формат конфигурации XML, добавленный в API 31, в com.microsoft.intune.mam.DataExtractionRules тег метаданных.

    • Пример 1. Если вы хотите, чтобы в приложении были полные резервные копии без исключений, необходимо задать для атрибутов и тегов метаданных значение 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" />
      
    • Пример 2. Если вы хотите, чтобы приложение использовало его пользовательское BackupAgent и отказалось от полного автоматического резервного копирования, соответствующего политике Intune, необходимо задать для атрибутов и тегов метаданных значение 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" />
      
    • Пример 3. Если вы хотите, чтобы в приложении были полные резервные копии в соответствии с пользовательскими правилами, определенными в XML-файле, задайте атрибут и тег метаданных для одного и того же ресурса 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" />
      

Резервное копирование ключей и значений

Параметр "Резервное копирование ключей и значений " доступен для всех API 8+ и отправляет данные приложения в службу архивации Android. Объем данных на приложение ограничен 5 МБ. При использовании резервного копирования ключей и значений необходимо использовать BackupAgentHelper или BackupAgent.

BackupAgentHelper

BackupAgentHelper проще реализовать, чем BackupAgent , как с точки зрения собственных функций Android, так и интеграции Intune MAM BackupAgentHelper позволяет разработчику регистрировать целые файлы и общие настройки в FileBackupHelper и SharedPreferencesBackupHelper (соответственно), которые затем добавляются в BackupAgentHelper при создании. Выполните следующие действия, чтобы использовать BackupAgentHelper с Intune MAM:

  1. Чтобы использовать резервное копирование с несколькими удостоверениями с помощью BackupAgentHelper, следуйте инструкциям в руководстве по Расширению резервного копированияAgentHelper для Android.

  2. Расширьте класс MAM, эквивалент BackupAgentHelper, FileBackupHelper и SharedPreferencesBackupHelper.

Класс Android Эквивалент MAM
BackupAgentHelper MAMBackupAgentHelper
FileBackupHelper MAMFileBackupHelper
SharedPreferencesBackupHelper MAMSharedPreferencesBackupHelper

Соблюдение этих рекомендаций приведет к успешному резервному копированию и восстановлению с несколькими удостоверениями.

BackupAgent

BackupAgent позволяет гораздо более четко определить, какие данные резервируются. Так как разработчик несет ответственность за реализацию, для обеспечения надлежащей защиты данных из Intune необходимо выполнить дополнительные действия. Так как большая часть работы выполняется на вас, разработчик, интеграция Intune выполняется немного больше.

Интеграция MAM:

  1. Внимательно прочтите руководство по резервному копированию ключей и значений для Android и, в частности , расширение BackupAgent , чтобы убедиться, что реализация BackupAgent соответствует рекомендациям Android.

  2. Предоставьте классу расширение MAMBackupAgent.

Резервное копирование с несколькими удостоверениями:

  1. Прежде чем приступить к резервному копированию, убедитесь, что для файлов или буферов данных, которые вы планируете создать, действительно разрешено ИТ-администратором создавать резервные копии в сценариях с несколькими удостоверениями. Используйте isBackupAllowed в MAMFileProtectionManager и MAMDataProtectionManager , чтобы определить это. Если резервное копирование файла или буфера данных запрещено, их не следует включать в резервную копию.

  2. В какой-то момент во время резервного копирования, если вы хотите создать резервную копию удостоверений для файлов, возвращенных на шаге 1, необходимо вызвать backupMAMFileIdentity(BackupDataOutput data, File … files) с файлами, из которых планируется извлечь данные. Это автоматически создаст новые сущности резервного копирования и запишет их в .BackupDataOutput Эти сущности будут автоматически использоваться при восстановлении.

Восстановление с несколькими удостоверениями. Руководство по резервному копированию данных определяет общий алгоритм восстановления данных приложения и предоставляет пример кода в разделе Расширение backupAgent . Чтобы обеспечить успешное восстановление с несколькими удостоверениями, необходимо следовать общей структуре, представленной в этом примере кода, с особым вниманием к следующему:

  1. Для выполнения сущностей резервного while(data.readNextHeader())копирования необходимо использовать цикл *.

  2. Вызов необходимо вызватьdata.skipEntityData(), если data.getKey() не соответствует ключу, который вы написали в onBackup. Без выполнения этого шага восстановление может завершиться неудачно.

  3. Избегайте возврата при использовании сущностей резервного копирования в while(data.readNextHeader())конструкции *, так как автоматически записываемые сущности будут потеряны.

  • Где data — имя локальной переменной для MAMBackupDataInput , которая передается приложению при восстановлении.

Ограничения пользовательского захвата экрана

Если приложение содержит настраиваемую функцию захвата экрана, которая обходит ограничение на уровне FLAG_SECURE AndroidWindow, необходимо проверить политику захвата экрана, прежде чем разрешить полный доступ к этой функции. Например, если приложение использует настраиваемое средство отрисовки для отрисовки текущего представления в PNG-файл, необходимо сначала проверить .AppPolicy.getIsScreenCaptureAllowed()

Примечание.

Если ваше приложение не содержит пользовательские или сторонние функции захвата экрана, вам не нужно предпринимать никаких действий для ограничения захвата экрана. Политика захвата экрана автоматически применяется на Window уровне для всех интегрированных приложений MAM. Любые попытки ос или другого приложения записать Window объект в приложении будут заблокированы по мере необходимости. Например, если пользователь пытается записать экран вашего приложения с помощью встроенных снимка экрана Android или функций записи экрана, запись будет автоматически ограничена без участия приложения.

Поддержка ЦС защиты приложений

ЦС защиты приложений (условный доступ), также известный как ЦС на основе приложений, ограничивает доступ к ресурсам до тех пор, пока приложение не будет управляться политиками защиты приложений Intune. Идентификатор Microsoft Entra обеспечивает это, требуя регистрации приложения и управления им перед предоставлением маркера для доступа к ресурсу, защищенному ЦС.

Примечание.

Для поддержки ЦС защиты приложений требуется библиотека MSAL версии 1.0.0 (или более поздней).

Обработка несоответствия с помощью MSAL

При получении маркера для учетной записи библиотека MSAL может возвращать или вызывать объект MsalIntuneAppProtectionPolicyRequiredException , чтобы указать на несоответствие управлению политикой защиты приложений. Дополнительные параметры можно извлечь из исключения для использования при исправлении соответствия (см. раздел MAMComplianceManager). После успешного исправления приложение может повторно просмотреть получение маркера через MSAL.

MAMComplianceManager

Интерфейс MAMComplianceManager используется при получении требуемой политикой ошибки из MSAL. Он содержит метод [remediateCompliance], который следует вызвать, чтобы попытаться поместить приложение в соответствующее состояние. Ссылку на MAMComplianceManager можно получить следующим образом:

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

// make use of mgr

Возвращаемый MAMComplianceManager экземпляр гарантированно не будет иметь значение null.

package com.microsoft.intune.mam.policy;

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

Метод remediateCompliance() вызывается для того, чтобы попытаться поставить приложение под управление, чтобы выполнить условия предоставления запрошенного маркера идентификатором Microsoft Entra. Первые четыре параметра можно извлечь из исключения, полученного методом MSAL AuthenticationCallback.onError() (см. пример кода ниже). Последний параметр является логическим, который определяет, отображается ли пользовательский интерфейс во время попытки соответствия.

remediateCompliance отображает простое диалоговое окно выполнения блокировки, чтобы приложения не отображали настраиваемый пользовательский интерфейс во время этой операции. Это диалоговое окно будет отображаться только во время выполнения исправления соответствия; не будет отображаться окончательный результат. Приложение может зарегистрировать получателя для COMPLIANCE_STATUS уведомления, чтобы обработать успешное или неудачное выполнение попытки исправления соответствия. Дополнительные сведения см. в разделе Уведомления о состоянии соответствия .

remediateCompliance() может инициировать регистрацию MAM в рамках установления соответствия требованиям. Приложение может получать уведомление о регистрации, если оно зарегистрировало получателя уведомлений для уведомлений о регистрации. Зарегистрированное MAMServiceAuthenticationCallback приложение будет иметь метод acquireToken() , вызываемый для получения маркера для регистрации. acquireToken() вызывается до того, как приложение получит собственный токен, поэтому все задачи по созданию счетов или учетных записей, выполняемые приложением после успешного получения маркера, могут еще не быть выполнены. В этом случае обратный вызов должен иметь возможность получения маркера.

Если не удается вернуть маркер из acquireToken(), попытка исправления соответствия завершится ошибкой.

При последующем вызове updateToken с допустимым маркером для запрошенного ресурса исправление соответствия будет немедленно повторен с заданным маркером.

Примечание.

Автоматическое получение маркера будет по-прежнему возможно в , acquireToken() так как пользователь уже будет руководствоваться установкой брокера и регистрацией устройства до MsalIntuneAppProtectionPolicyRequiredException получения исключения. Это приводит к тому, что брокер имеет действительный маркер обновления в кэше, что позволяет автоматически получить запрошенный маркер.

Ниже приведен пример получения требуемой политикой ошибки в методе AuthenticationCallback.onError() и вызова MAMComplianceManager для обработки ошибки.

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

Уведомления о состоянии соответствия

Если приложение регистрирует уведомления типа COMPLIANCE_STATUS, будет отправлено MAMComplianceNotification , чтобы сообщить приложению об окончательном состоянии попытки исправления соответствия. Дополнительные сведения о регистрации см. в разделе Регистрация для уведомлений из пакета SDK .

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

Метод getComplianceStatus() возвращает результат попытки исправления соответствия в виде значения из перечисления [MAMCAComplianceStatus].

Код состояния Объяснение
UNKNOWN Состояние неизвестно. Это может указывать на непредвиденные причины сбоя. Дополнительные сведения можно найти в журналах корпоративного портала.
COMPLIANT Исправление соответствия успешно выполнено, и теперь приложение соответствует политике. Получение маркера MSAL должно быть повторно.
NOT_COMPLIANT Попытка исправить соответствие не удалось. Приложение не соответствует требованиям, и получение маркера MSAL не должно выполняться повторно до тех пор, пока не будет исправлено условие ошибки. Дополнительные сведения об ошибке отправляются с помощью MAMComplianceNotification.
SERVICE_FAILURE При попытке получить данные о соответствии из службы Intune произошел сбой. Дополнительные сведения можно найти в журналах корпоративного портала.
NETWORK_FAILURE Произошла ошибка при подключении к службе Intune. Приложение должно повторить попытку получения маркера при восстановлении сетевого подключения.
CLIENT_ERROR Попытка исправить соответствие по какой-либо причине, связанной с клиентом, завершилась сбоем. Например, нет маркера или неправильного пользователя. Дополнительные сведения об ошибке отправляются с помощью MAMComplianceNotification.
PENDING Попытка исправить соответствие не удалась, так как ответ о состоянии еще не был получен от службы при превышении предельного времени. Приложение должно повторить попытку получения маркера позже.
COMPANY_PORTAL_REQUIRED Чтобы обеспечить успешное исправление соответствия требованиям, на устройстве должен быть установлен корпоративный портал. Если корпоративный портал уже установлен на устройстве, приложение необходимо перезапустить. В этом случае появится диалоговое окно с просьбой перезапустить приложение.

Если состояние соответствия — MAMCAComplianceStatus.COMPLIANT, приложение должно повторно инициировать получение исходного маркера (для собственного ресурса).

Если попытка исправления соответствия не удалась, getComplianceErrorTitle() методы и getComplianceErrorMessage() будут возвращать локализованные строки, которые приложение может отобразить конечному пользователю при необходимости. Большинство ошибок не могут быть исправлены приложением, поэтому в общем случае лучше не создать учетную запись или войти в систему и разрешить пользователю повторить попытку позже.

Если сбой является постоянным, журналы корпоративного портала могут помочь определить причину. Конечный пользователь может отправлять журналы. Дополнительные сведения см. в разделе Отправка журналов и отправка по электронной почте.

Ниже приведен пример регистрации получателя с помощью анонимного класса для реализации интерфейса 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);

Примечание.

Получатель уведомлений должен быть зарегистрирован перед вызовом remediateCompliance() , чтобы избежать состояния гонки, которое может привести к пропуску уведомления.

Объявление о поддержке ЦС защиты приложений

Когда приложение будет готово к исправлению ЦС приложения, вы можете сообщить Microsoft Identity, что приложение готово к ЦС приложения. Для этого в приложении MSAL создайте общедоступный клиент, используя возможности клиента 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"
          }
        }
      ]
    }

Завершив описанные выше действия, перейдите к описанию Проверка ЦС защиты приложений ниже.

Заметки о реализации

Примечание.

Метод приложения должен передать значение false для forceRefresh флага MAMServiceAuthenticationCallback.acquireToken() в acquireTokenSilentAsync().

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

acquireTokenSilentAsync(acquireTokenSilentParameters);

Примечание.

Если во время попытки исправления необходимо отобразить настраиваемый блокирующий пользовательский интерфейс, необходимо передать значение false для параметра showUX в remediateCompliance(). Перед вызовом remediateCompliance()необходимо убедиться, что отображается пользовательский интерфейс и регистрируется прослушиватель уведомлений. Это предотвратит состояние гонки, когда уведомление может быть пропущено в случае remediateCompliance() сбоя очень быстро. Например, onCreate() метод или onMAMCreate() подкласса Activity является идеальным местом для регистрации прослушивателя уведомлений и последующего вызова remediateCompliance(). Параметры для remediateCompliance() могут быть переданы вашему пользовательскому интерфейсу в качестве дополнительных элементов намерения. При получении уведомления о состоянии соответствия можно отобразить результат или просто завершить действие.

Примечание.

remediateCompliance() зарегистрирует учетную запись и попытается выполнить регистрацию. После получения основного маркера вызов registerAccountForMAM() не требуется, но в этом нет никакого вреда. С другой стороны, если приложению не удается получить маркер и оно хочет удалить учетную запись пользователя, оно должно вызвать метод unregisterAccountForMAM() , чтобы удалить учетную запись и предотвратить повторные попытки фоновой регистрации.

Регистрация для получения уведомлений из пакета SDK

В руководстве по пакету SDK для приложений Intune уже обсуждалось несколько сценариев, в которых вашему приложению может потребоваться регистрация для получения уведомлений из пакета SDK, например:

В этом разделе описываются все типы уведомлений, которые может отправлять пакет SDK, когда и почему приложение хочет его прослушивать, а также как реализовать получатель уведомлений.

Типы уведомлений

Все уведомления пакета SDK реализуют интерфейс MAMNotification , который имеет одну функцию , getType()возвращающую перечисление MAMNotificationType .

Большинство уведомлений — это MAMUserNotification, которые предоставляют сведения, относящиеся к одному удостоверению. Идентификатор идентификатора удостоверения можно получить с помощью getUserOid() функции, а имя участника-пользователя — с помощью getUserIdentity().

MAMEnrollmentNotification и MAMComplianceNotification дополнительно расширяют MAMUserNotification, которые содержат результаты для попыток регистрации пользователя или устройства в службе MAM и результаты попытки исправления соответствия для ЦС защиты приложений соответственно.

Тип уведомления Класс Notification Причина уведомления Применимость Советы по обработке Сведения о потоке
COMPLIANCE_STATUS MAMComplianceNotification Возвращает результат попытки исправления соответствия. Приложения, реализующие ЦС защиты приложений, должны обрабатывать это. - Недетерминированным
MAM_ENROLLMENT_RESULT MAMEnrollmentNotification Возвращает результат попытки регистрации. Все приложения получат его. - Недетерминированным
MANAGEMENT_REMOVED MAMUserNotification Приложение станет неуправляемой. Приложения, использующие MAMDataProtectionManager эту функцию, должны это обрабатывать. См . MANAGEMENT_REMOVED ниже. Никогда не в потоке пользовательского интерфейса
REFRESH_APP_CONFIG MAMUserNotification Возможно, значения конфигурации приложения изменились. Приложения, которые реализуют конфигурацию приложений и кэшируют данные конфигурации приложений, должны обрабатывать это. Приложения должны быть недействительными и обновлять все кэшированные данные конфигурации приложений. Недетерминированным
REFRESH_POLICY MAMUserNotification Возможно, политика защиты приложений изменилась. Приложения, которые кэшируют политику защиты приложений, должны обрабатывать эту политику. Приложения должны быть недействительными и обновлять все кэшированные данные политики защиты приложений. Недетерминированным
WIPE_USER_DATA MAMUserNotification Очистка будет выполняться(*). Приложения, использующие MAMDataProtectionManager эту функцию,WIPE_USER_AUXILIARY_DATA должны обрабатывать или. См . раздел Выборочная очистка. Никогда не в потоке пользовательского интерфейса
WIPE_USER_AUXILIARY_DATA MAMUserNotification Очистка будет выполняться(*). Это будут получать только приложения с несколькими удостоверениями.
Приложения, использующие MAMDataProtectionManager эту функцию,WIPE_USER_DATA должны обрабатывать или.
См . раздел Выборочная очистка. Никогда не в потоке пользовательского интерфейса
WIPE_COMPLETED MAMUserNotification Очистка завершена. Всегда необязательный. Доставлено после WIPE_USER_DATA или WIPE_USER_AUXILIARY_DATA. *Если приложение сообщает о сбое от обработчика для WIPE_USER_DATA или WIPE_USER_AUXILIARY_DATA, это уведомление не будет отправлено.- Никогда не в потоке пользовательского интерфейса

(*) Очистка может происходить по многим причинам, например:

  • Ваше приложение называется unregisterAccountForMAM.
  • ИТ-администратор инициировал удаленную очистку.
  • Политики условного доступа, необходимые администратору, не были удовлетворены.

Предупреждение

Приложение никогда не должно регистрироваться как для уведомлений, WIPE_USER_DATA так и WIPE_USER_AUXILIARY_DATA .

MANAGEMENT_REMOVED

Уведомление MANAGEMENT_REMOVED сообщает приложению о том, что ранее управляемая политикой учетная запись станет неуправляемой. После того как учетная запись станет неуправляемой, приложение больше не сможет читать зашифрованные файлы этой учетной записи, считывать данные учетной записи, зашифрованные с помощью MAMDataProtectionManager, взаимодействовать с зашифрованным буфером обмена или иным образом участвовать в экосистеме управляемых приложений.

Для этого не требуется очистка данных пользователя или выход пользователя (если требуется очистка WIPE_USER_DATA , будет отправлено уведомление). Многим приложениям может не потребоваться обрабатывать это уведомление, но приложения, которые используют MAMDataProtectionManager это, должны обрабатывать это. Дополнительные сведения см. в разделе Защита буфера данных .

Когда пакет SDK вызывает получателя приложения MANAGEMENT_REMOVED , выполняется следующее:

  • Пакет SDK уже расшифровал ранее зашифрованные файлы (но не защищенные буферы данных), принадлежащие приложению. Файлы в общедоступных расположениях на sdcard, которые напрямую не принадлежат приложению (например, папки "Документы" или "Скачать"), не расшифровываются.

  • Новые файлы или защищенные буферы данных, созданные методом получателя (или любой другой код, выполняемый после запуска получателя), не шифруются.

  • Приложение по-прежнему имеет доступ к ключам шифрования, поэтому такие операции, как расшифровка буферов данных, будут успешными.

После возврата получателя приложения у него больше не будет доступа к ключам шифрования.

Реализация MAMNotificationReceiver

Чтобы зарегистрироваться для получения уведомлений из пакета SDK, приложение должно создать MAMNotificationReceiver и зарегистрировать его в MAMNotificationReceiverRegistry.

Чтобы зарегистрировать получателя, вызовите registerReceiver у получателя и требуемый тип уведомления в методе Application.onCreate :

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

Реализация MAMNotificationReceiver приложения должна включать onReceive(MAMNotification notification) метод . Этот метод будет вызываться отдельно для каждого полученного уведомления, и он должен возвращать boolean. Как правило, этот метод всегда должен возвращать true, если приложение не обнаружило ошибку, отвечая на уведомление.

Как и в случае с другими типами получателей Android, ваше приложение обладает гибкостью при обработке уведомлений:

  • Он может создавать отдельные реализации MAMNotificationReceiver для отдельных типов уведомлений (описано ниже). В этом случае убедитесь, что каждая реализация и тип уведомления регистрируются отдельно.
  • Он может использовать одну реализацию MAMNotificationReceiver , которая содержит логику для реагирования на несколько различных типов уведомлений. В этом случае оно должно быть зарегистрировано для каждого типа уведомлений, на которые он может отвечать.
  • Он может создать несколько реализаций MAMNotificationReceiver , каждая из которых отвечает на один и тот же тип уведомления. В этом случае оба уведомления должны быть зарегистрированы в одном типе уведомлений.

Совет

Его безопасно заблокировать MAMNotificationReceiver.onReceive , так как обратный вызов не выполняется в потоке пользовательского интерфейса.

Пользовательские темы

Пользовательская тема может быть предоставлена пакету SDK для приложений Intune; эта пользовательская тема будет применяться ко всем экранам и диалогам пакета SDK. Если тема не указана, будет использоваться тема пакета SDK по умолчанию.

Предоставление пользовательской темы

Чтобы указать тему, необходимо добавить следующую строку кода в Application.onMAMCreate метод:

MAMThemeManager.setAppTheme(R.style.AppTheme);

В приведенном выше примере необходимо заменить R.style.AppTheme темой стиля, которую требуется применить к пакету SDK.

Управление доверенными корневыми сертификатами

Если приложению требуются ssl/TLS-сертификаты, выданные локальным или частным центром сертификации для обеспечения безопасного доступа к внутренним веб-сайтам и приложениям, пакет SDK для приложений Intune добавил поддержку управления доверием к сертификатам с помощью классов API MAMTrustedRootCertsManager и MAMCertTrustWebViewClient.

Примечание.

MAMCertTrustWebViewClient поддерживает Android 10 или более поздней версии.

Управление доверенными корневыми сертификатами обеспечивает поддержку:

  • SSLContext
  • SSLSocketFactory
  • TrustManager
  • WebView

Требования

Примечание.

Управление доверенными корневыми сертификатами можно использовать независимо от VPN-шлюза Microsoft Tunnel, однако для использования необходимо лицензировать Microsoft MAM Tunnel.

Использование доверенных корневых сертификатов из Intune для установления привязок доверия

Управление доверенными корневыми сертификатами позволяет приложению использовать доверенные корневые сертификаты из Intune в сочетании с сертификатами с устройства.

Классы API MAMTrustedRootCertsManager и MAMCertTrustWebViewClient используют доверенные корневые сертификаты Intune, доставляемые через политику конфигурации приложений, в качестве резервного варианта, если в хранилищах доверенных корневых сертификатов устройства нет необходимых доверенных корневых сертификатов для установления безопасного подключения к локальным ресурсам. Таким образом, приложение может использовать сертификаты устройства и Intune для проверки безопасных подключений и связи с доверенными источниками.

Чтобы улучшить параметры безопасности сети, приложение может использовать XML-файл конфигурации сетевой безопасности. Управление доверенными корневыми сертификатами учитывает эту дополнительную безопасность, проверяя, имеет ли XML-файл конфигурации безопасности сети приложения какие-либо из следующих функций:

  • Пользовательские привязки доверия с дополнительными центрами сертификации, такими как самозаверяемые сертификаты.
  • Правила для конкретной области для ограничения доверенных ЦС.
  • Наборы закреплений для сертификатов для определенных доменов.

Примечание.

Дополнительные сведения о конфигурации безопасности сети Android см. в статье Конфигурация сетевой безопасности.

Если какое-либо из них относится к домену, который проверяется на доверие, управление доверенными корневыми сертификатами пропустит настраиваемые проверки доверия для этого домена и позволит только диспетчерам доверия платформы по умолчанию выполнять эти проверки.

Класс MAMTrustedRootCertsManager

Этот класс предоставляет следующие API:

  • createSSLContextForOID(String oid, String protocol): создает SSLContext объект, который использует доверенные корневые сертификаты для указанного удостоверения и указанного протокола SSL/TLS. Возвращенный SSLContext объект из этого класса уже правильно инициализирован объектами X509TrustManager , которые используют объединенные доверенные корневые сертификаты устройства и службы MAM.
  • createSSLSocketFactoryForOID(String oid, String protocol): создает SSLSocketFactory объект, который использует доверенные корневые сертификаты для указанного удостоверения и указанного протокола SSL/TLS. На возвращенный SSLSocketFactory объект ссылается тот же SSLContext объект в этом классе.
  • createX509TrustManagersForOID(String oid): создает массив X509TrustManager объектов, использующих объединенные доверенные корневые сертификаты устройства и службы MAM для указанного удостоверения.

Примечание.

Ожидается oid , что параметр будет идентификатором пользователя Microsoft Entra (OID) для конкретного пользователя, запускаемого приложением. В случае, если идентификатор пользователя неизвестен заранее, можно передать значение NULL, и MAM попытается обнаружить правильное удостоверение из потока или процесса, в котором вызываются эти API. Удостоверение должно быть правильно задано в процессе или потоке, чтобы MAM обнаружил удостоверение. Дополнительные сведения о настройке активного удостоверения в процессе или потоке см. в разделе Этап 5. Несколько удостоверений

Примечание.

protocol Если параметр не указан, используется самый высокий поддерживаемый протокол SSL/TLS на платформе.

Ниже приведены некоторые примеры использования этого класса.

Пример использования 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
...
Пример использования 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
...

Класс MAMCertTrustWebViewClient

Этот класс предоставляет пользовательскую реализацию класса android.webkit.WebViewClient Android, которая предоставляет способ обработки ошибки android.net.http.SslError.SSL_UNTRUSTED SSL в WebView. При обработке ошибки класс использует доверенные корневые сертификаты, настроенные в Intune и полученные из службы MAM, для проверки надежности узла из целевого URL-адреса, который создал ошибку SSL в WebView. Если пользовательская реализация не обрабатывает ошибку SSL, вызывается поведение по умолчанию, унаследованное от суперкласса. При использовании этого класса необходимо создать его экземпляр, а затем вызвать WebView.setWebViewClient(WebViewClient) его для регистрации в экземпляре WebView .

Ниже приведен пример использования этого класса.

Пример использования 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
...

Условия выхода

Дополнительные сведения см. в статье Быстрое тестирование с изменением политики .

Проверка сохранения в / открытия из ограничений

Пропустите, если вы не реализовали политику для ограничения передачи данных между приложениями и устройствами или облачными хранилищами.

Настройтесь в каждом сценарии, в котором приложение может сохранять данные в облачных службах или локальных данных, а также открывать данные из облачных служб или локальных данных.

Для простоты в этих тестах предполагается, что ваше приложение поддерживает только сохранение и открытие данных из OneDrive для бизнеса из одного расположения в приложении. Однако необходимо проверить каждое сочетание: каждое поддерживаемое расположение сохранения для каждого места, где приложение позволяет сохранять данные, и каждое поддерживаемое открытое расположение для каждого места, где приложение разрешает открывать данные.

Для этих тестов установите приложение и корпоративный портал Intune; Перед началом теста войдите в систему с помощью управляемой учетной записи. Также:

  • Задайте политику управляемой учетной записи следующим образом:
    • "Отправка данных организации в другие приложения" в "Приложения, управляемые политикой".
    • "Получение данных из других приложений" на "Приложения, управляемые политикой".
Сценарий Предпосылки Действия
Сохранить в, полностью разрешено Для политики "Сохранение копий данных организации" задано значение "Разрешить" — Перейдите к месту, где приложение может сохранять данные в OneDrive для бизнеса.
— Попробуйте сохранить документ в OneDrive для бизнеса в той же управляемой учетной записи, вошедшего в приложение.
— Убедитесь, что сохранение разрешено.
Сохранить в, исключить — Для политики "Сохранение копий данных организации" задано значение "Блокировать".
— Политика "Разрешить пользователю сохранять копии в выбранных службах", для параметра "OneDrive для бизнеса" задано только "OneDrive для бизнеса".
— Перейдите к месту, где приложение может сохранять данные в OneDrive для бизнеса.
— Попробуйте сохранить документ в OneDrive для бизнеса в той же управляемой учетной записи, вошедшего в приложение.
— Убедитесь, что сохранение разрешено.
— Если приложение разрешает, попробуйте сохранить файл в другом расположении облачного хранилища и убедитесь, что он заблокирован.
Сохранить в, заблокировано Для политики "Сохранение копий данных организации" задано значение "Блокировать" — Перейдите к месту, где приложение может сохранять данные в OneDrive для бизнеса.
— Попробуйте сохранить документ в OneDrive для бизнеса в той же управляемой учетной записи, вошедшего в приложение.
— Убедитесь, что сохранение заблокировано.
— Если приложение разрешает, попробуйте сохранить файл в другом расположении облачного хранилища и убедитесь, что он заблокирован.
Открыть с, полностью разрешено Для политики "Открытие данных в документах организации" задано значение "Разрешить" — Перейдите к месту, где приложение может открывать данные из OneDrive для бизнеса.
— Попытка открыть документ из OneDrive для бизнеса из той же управляемой учетной записи, вошедшего в хранилище приложения.
— Убедитесь, что открытие разрешено.
Открытие из, исключение — Для политики "Открытие данных в документах организации" задано значение "Блокировать".
— Политика "Разрешить пользователям открывать данные из выбранных служб", для параметра "OneDrive для бизнеса" задано только значение "OneDrive для бизнеса".
— Перейдите к месту, где приложение может открывать данные из OneDrive для бизнеса.
— Попытка открыть документ из OneDrive для бизнеса из той же управляемой учетной записи, вошедшего в хранилище приложения.
— Убедитесь, что открытие разрешено.
— Если приложение позволяет, попробуйте открыть другой файл из другого расположения облачного хранилища и убедитесь, что он заблокирован.
Открыть с, заблокировать Для политики "Открытие данных в документах организации" задано значение "Блокировать" — Перейдите к месту, где приложение может открывать данные из OneDrive для бизнеса.
— Попытка открыть документ из OneDrive для бизнеса из той же управляемой учетной записи, вошедшего в хранилище приложения.
— Убедитесь, что открытие заблокировано.
— Если приложение позволяет, попробуйте открыть другой файл из другого расположения облачного хранилища и убедитесь, что он заблокирован.

Проверка ограничений уведомлений

Пропустите, если вы не реализовали политику для ограничения содержимого в уведомлениях.

Что касается Политики защиты приложений, приложение может запускать три разных типа уведомлений:

  1. Уведомления, не содержащие никаких данных учетной записи.
  2. Уведомления, содержащие данные, принадлежащие управляемой учетной записи.
  3. Уведомления, содержащие данные, принадлежащие неуправляемой учетной записи.

Если приложение является единым удостоверением, актуальны только первые 2, так как защита не будет применяться, если единственная учетная запись неуправляема.

Ограничения уведомлений можно проверить, активировав все три типа уведомлений с разными настроенными значениями политики.

Для этих тестов установите приложение и корпоративный портал Intune; Перед началом теста войдите в систему с помощью управляемой учетной записи. Если ваше приложение имеет несколько удостоверений, также войдите в приложение с неуправляемой учетной записью.

Сценарий Предпосылки Действия
Полное содержимое заблокировано Для политики "Уведомления о данных организации" задано значение "Блокировать" — активируйте приложение для запуска уведомления без данных учетной записи.
— Убедитесь, что это уведомление не отображает содержимое.
— активируйте приложение для запуска уведомления с данными управляемой учетной записи.
— Убедитесь, что это уведомление не отображает содержимое.
— активируйте приложение для запуска уведомления с данными неуправляемой учетной записи.
— Убедитесь, что это уведомление не отображает содержимое.
Частичное содержимое заблокировано Для политики "Уведомления о данных организации" задано значение "Блокировать данные организации" — активируйте приложение для запуска уведомления без данных учетной записи.
— Убедитесь, что в этом уведомлении отображается полное содержимое.
— активируйте приложение для запуска уведомления с данными управляемой учетной записи.
— Убедитесь, что это уведомление отредактирует содержимое управляемой учетной записи.
— активируйте приложение для запуска уведомления с данными неуправляемой учетной записи.
— Убедитесь, что в этом уведомлении отображается полное содержимое.
Содержимое не заблокировано Для политики "Уведомления о данных организации" задано значение "Разрешить"

Проверка резервного копирования и восстановления данных

Пропустите, если вы не реализовали политику для защиты данных резервного копирования.

Повторно ознакомьтесь с содержимым (файлами и /или парами "ключ—значение"), настроенным приложением для резервного копирования. Убедитесь, что только ожидаемое содержимое является частью восстановления. Дополнительное содержимое при восстановлении может привести к утечке данных.

Для этих тестов установите приложение и корпоративный портал Intune; Перед началом теста войдите в систему с помощью управляемой учетной записи. Если ваше приложение имеет несколько удостоверений, также войдите в приложение с неуправляемой учетной записью.

Следуйте официальным инструкциям Android по тестированию резервного копирования. Эти инструкции отличаются для автоматического резервного копирования и резервного копирования ключей и значений, поэтому следуйте указаниям.

Проверка пользовательского снимка экрана по политике

Пропустите, если вы не реализовали настраиваемые ограничения захвата экрана.

Если в вашем приложении есть функция, которая обходит Android на уровне FLAG_SECURE, убедитесь, что эта функция заблокирована Windowограничениями снимка экрана политики защиты приложений.

Для этих тестов установите приложение и корпоративный портал Intune; Перед началом теста войдите в систему с помощью управляемой учетной записи.

Сценарий Предпосылки Действия
Снимок экрана заблокирован Для политики "Захват экрана и Google Помощник" задано значение "Блокировать" — Перейдите к расположению в приложении, которое использует пользовательский код FLAG_SECURE.
— попытаться использовать эту функцию.
— Убедитесь, что функция заблокирована.
Снимок экрана разрешен Для политики "Захват экрана и Google Помощник" задано значение "Разрешить" — Перейдите к расположению в приложении, которое использует пользовательский код FLAG_SECURE.
— попытаться использовать эту функцию.
— Убедитесь, что функция разрешена.

Проверка ЦС защиты приложений

Пропустите, если вы не реализовали центр поддержки защиты приложений.

В дополнение к типичным шагам проверки создания и назначения политики защиты приложений для приложения и тестовой учетной записи необходимо также создать и назначить политику условного доступа защиты приложений для тестовой учетной записи. Дополнительные сведения см. в статье Настройка политик условного доступа на основе приложений в Intune .

Шаги тестирования:

  1. Перед началом этого теста удалите Microsoft Authenticator и корпоративный портал Intune.
  2. Установите приложение.
  3. Войдите в приложение с помощью тестовой учетной записи, предназначенной для политики защиты приложений и политики ЦС на основе приложений.
  4. Убедитесь, что приложение предлагает установить корпоративный портал.
  5. Войдите еще раз.
  6. Убедитесь, что приложение предлагает зарегистрировать устройство. Следуйте инструкциям. Если ваше приложение не запрашивает регистрацию здесь, сначала убедитесь, что тестовое устройство удалило другие приложения с поддержкой пакета SDK, корпоративный портал и Authenticator. Если запрос по-прежнему не отображается, вернитесь к приведенным выше инструкциям по реализации.
  7. Убедитесь, что вы можете получить доступ ко всем данным приложения после регистрации.

Проверка получателей уведомлений

Пропустите, если вы не реализовали регистрацию для уведомлений из пакета SDK.

Действия по проверке зависят от типа уведомлений, для которого зарегистрировано приложение. Для всех типов уведомлений добавьте ведение журнала, чтобы убедиться, что получатель вызывается должным образом.

MAM_ENROLLMENT_RESULT Можно активировать просто путем входа в приложение с учетной записью, предназначенной для политики защиты приложений.

REFRESH_APP_CONFIG и REFRESH_POLICY можно активировать, обновив соответствующую политику конфигурации приложений и политику защиты приложений, предназначенные для тестовой учетной записи и ожидая, пока пакет SDK получит обновленную политику.

Совет

Чтобы ускорить этот процесс, см. статью Быстрое тестирование с изменением политики .

MANAGEMENT_REMOVED, WIPE_USER_DATA, WIPE_USER_AUXILIARY_DATAWIPE_COMPLETED уведомления можно активировать путем выборочной очистки из Microsoft Intune.

Проверка пользовательских тем

Пропустите, если вы не реализовали пользовательские темы.

Поддержку пользовательских тем можно проверить, проверив цвета в диалоговых окнах пакета SDK. Самое простое диалоговое окно для проверки — экран ПИН-кода MAM.

Предпосылки:

  • Задайте политику управляемой учетной записи следующим образом:
    • "PIN-код для доступа" к "Обязательный".
  • Установите приложение и корпоративный портал Intune.

Этапы тестирования.

  1. Запустите приложение и войдите в систему с помощью тестовой учетной записи.
  2. Убедитесь, что отображается экран ПИН-кода MAM, который основан на пользовательской теме, предоставленной пакету SDK.

Дальнейшие действия

Если вы выполнили это руководство по порядку и выполнили все описанные выше условия выхода , поздравляем, что ваше приложение теперь полностью интегрировано с пакетом SDK для приложений Intune и может применять политики защиты приложений! Если вы пропустили один из предыдущих разделов участия в приложении, Этап 5. Многоудостоверение и Этап 6. Конфигурация приложения и не уверены, должно ли ваше приложение поддерживать эти функции, вернитесь к разделу Ключевые решения для интеграции пакета SDK.

Защита приложений теперь является основным сценарием для вашего приложения. Продолжайте работать с этим руководством и Приложением по мере разработки приложения.