Пакет SDK для приложений Intune для iOS — поддержка условного доступа защиты приложений (необязательно)

Защита приложений: условный доступ блокирует доступ к маркерам сервера, пока служба Intune не подтвердит применение политики защиты приложений. Эта функция требует изменений в потоках добавления пользователей. После того как клиент включит центр сертификации защиты приложений, приложения в клиенте этого клиента, которые обращаются к защищенным ресурсам, не смогут получить маркер доступа, если они не поддерживают эту функцию.

Примечание.

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

Этап 6. Поддержка условного доступа App Protection

Цели этапа

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

Зависимости

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

  1. Приложение Authenticator для iOS
  2. Библиотека проверки подлинности MSAL 1.0 или более поздней версии

Поток исправлений MAM-CA

Схема потока исправлений MAM-CA.

Ход процесса соответствия требованиям MAM

Схема потока процесса соответствия требованиям MAM.

Новые API

Большинство новых API можно найти в IntuneMAMComplianceManager.h. Приложению необходимо учитывать три отличия в поведении, описанные ниже.

Новое поведение Описание
Приложение → ADAL/MSAL: получение маркера Когда приложение пытается получить маркер, оно должно быть готово к получению ERROR_SERVER_PROTECTION_POLICY_REQUIRED. Приложение может получить эту ошибку в начале процесса добавления учетной записи или при доступе к маркеру на более поздних этапах жизненного цикла приложения. При обнаружении этой ошибки приложению не будет предоставлен маркер доступа, и его необходимо исправить для получения каких-либо данных сервера.
App → Intune SDK: Call remediteComplianceForIdentity Когда приложение получает ERROR_SERVER_PROTECTION_POLICY_REQUIRED от ADAL или MSALErrorServerProtectionPoliciesRequired от MSAL, оно должно вызвать [[экземпляр IntuneMAMComplianceManager] remediteComplianceForIdentity], чтобы Intune зарегистрировать приложение и применить политику. Во время этого вызова приложение может быть перезапущено. Если приложению необходимо сохранить состояние перед перезапуском, это можно сделать с помощью метода делегата restartApplication в IntuneMAMPolicyDelegate.

remediteComplianceForIdentity предоставляет все функции registerAndEnrollAccount и loginAndEnrollAccount. Следовательно, приложению не нужно использовать ни один из этих старых API.
Intune → приложение: уведомление о делегировании исправления После получения и применения политик служба Intune уведомляет приложение о результате, используя протокол IntuneMAMComplianceDelegate. Сведения о том, как приложение должно обрабатывать каждую ошибку, см. в IntuneMAMComplianceStatus в IntuneComplianceManager.h. Во всех случаях, кроме IntuneMAMComplianceCompliant, у пользователя не будет действительного маркера доступа.

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

Если не удается достичь совместимого состояния, приложение должно отобразить локализованное сообщение об ошибке и строку заголовка, предоставленную withErrorMessage и andErrorTitle.

Пример для метода hasComplianceStatus в IntuneMAMComplianceDelegate

(void) accountId:(NSString*_Nonnull) accountId hasComplianceStatus:(IntuneMAMComplianceStatus) status withErrorMessage:(NSString*_Nonnull) errMsg andErrorTitle:(NSString*_Nonnull) errTitle
{
    switch(status)
    {
        case IntuneMAMComplianceCompliant:
        {
            /*
            Handle successful compliance
            */
            break;
        }
        case IntuneMAMComplianceNotCompliant:
        case IntuneMAMComplianceNetworkFailure:
        case IntuneMAMComplianceUserCancelled:
        case IntuneMAMComplianceServiceFailure:
        {
            UIAlertController* alert = [UIAlertController alertControllerWithTitle:errTitle
            message:errMsg
            preferredStyle:UIAlertControllerStyleAlert];
            UIAlertAction* defaultAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault
            handler:^(UIAlertAction * action) {exit(0);}];
            [alert addAction:defaultAction];
            dispatch_async(dispatch_get_main_queue(), ^{
            [self presentViewController:alert animated:YES completion:nil];
            });
            break;
        }
        case IntuneMAMComplianceInteractionRequired:
        {
            [[IntuneMAMComplianceManager instance] remediateComplianceForAccountId:accountId silent:NO];
            break;
        }
    }
}
func accountId(_ accountId: String, hasComplianceStatus status: IntuneMAMComplianceStatus, withErrorMessage errMsg: String, andErrorTitle errTitle: String) {
        switch status {
        case .compliant:
           //Handle successful compliance
        case .notCompliant, .networkFailure,.serviceFailure,.userCancelled:
            DispatchQueue.main.async {
              let alert = UIAlertController(title: errTitle, message: errMsg, preferredStyle: .alert)
                alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { action in
                    exit(0)
                }))
                self.present(alert, animated: true, completion: nil)
            }
        case .interactionRequired:
            IntuneMAMComplianceManager.instance().remediateCompliance(forAccountId: accountId, silent: false)
   }

MSAL/ADAL

Приложения должны указать поддержку ЦС защиты приложений, добавив переменную возможностей клиента в свою конфигурацию MSAL/ADAL. Обязательные для заполнения следующие значения: claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}

Справочник по классам MSALPublicClientApplicationConfig (azuread.github.io)

    MSALAADAuthority *authority = [[MSALAADAuthority alloc] initWithURL:[[NSURL alloc] initWithString:IntuneMAMSettings.aadAuthorityUriOverride] error:&msalError];
    MSALPublicClientApplicationConfig *config = [[MSALPublicClientApplicationConfig alloc]
                                                 initWithClientId:IntuneMAMSettings.aadClientIdOverride
                                                 redirectUri:IntuneMAMSettings.aadRedirectUriOverride
                                                 authority:authority];

    /*
     IF YOU'RE IMPLEMENTING CA IN YOUR APP, PLEASE PAY ATTENTION TO THE FOLLOWING...
    */
    // This is needed for CA!
    // This line adds an option to the MSAL token request so that MSAL knows that CA may be active
    // Without this, MSAL won't know that CA could be activated
    // In the event that CA is activated and this line isn't in place, the auth flow will fail

    config.clientApplicationCapabilities = @[@"protapp"];
guard let authorityURL = URL(string: kAuthority) else {
            print("Unable to create authority URL")
            return
        }
         let authority = try MSALAADAuthority(url: authorityURL)
         let msalConfiguration = MSALPublicClientApplicationConfig(clientId: kClientID,redirectUri: kRedirectUri,
                                                                  authority: authority)
        msalConfiguration.clientApplicationCapabilities = ["ProtApp"]
        self.applicationContext = try MSALPublicClientApplication(configuration: msalConfiguration)

Чтобы получить идентификатор объекта Microsoft Entra для параметра accountId API исправления соответствия MAM SDK, необходимо выполнить следующие действия.

  • Сначала получите homeAccountId из userInfo[MSALHomeAccountIdKey] в объекте MSALError, отправленном MSAL, когда он сообщает ERROR_SERVER_PROTECTION_POLICY_REQUIRED приложению.
  • Этот идентификатор homeAccountId имеет формат ObjectId.TenantId. Извлеките значение ObjectId, разделив строку на ".", а затем используйте это значение для параметра accountId в API исправления remediteComplianceForAccountId.

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

Настройка тестового пользователя для ЦС защиты приложений

  1. Войдите в систему с учетными данными администратора на веб-сайте https://portal.azure.com.
  2. Выберите условный доступ>Microsoft Entra IDСоздать>новую политику. Создайте политику условного доступа.
  3. Настройте политику условного доступа, задав следующие элементы:
    • Заполнение поля "Имя".
    • Включение политики.
    • Назначение политики пользователю или группе.
  4. Назначение облачных приложений. Выберите "Включить>все облачные приложения". Как указано в предупреждении, будьте осторожны, чтобы не ошибиться в настройках этого параметра. Например, если исключить все облачные приложения, вы заблокируете себя доступ к консоли.
  5. Предоставьте элементы управления доступом, выбрав "Элементы управления доступом","Предоставить> доступ", >"Требовать политику защиты приложений".
  6. Завершив настройку политики, нажмите " Создать ", чтобы сохранить политику и применить ее.
  7. Включите политику.
  8. Также необходимо убедиться, что для пользователей действуют политики MAM.

Тестовые сценарии

Тестовый сценарий Проверка Ожидаемый результат
Всегда применяется MAM-CA Перед регистрацией в приложении убедитесь, что для пользователя настроен как центр сертификации защиты приложений, так и политика MAM. Убедитесь, что приложение обрабатывает описанные выше случаи исправления и может ли приложение получить маркер доступа.
MAM-ЦС, применяется после регистрации пользователя Пользователь уже должен войти в приложение, но не должен применяться к центру сертификации защиты приложений. Выберите пользователя для ЦС защиты приложений в консоли и проверьте правильность обработки исправления MAM
Несоответствие MAM-CA Настройте политику ЦС защиты приложений, но не назначайте политику MAM. У пользователя не должно получиться получить маркер доступа. Это полезно для тестирования того, как приложение обрабатывает случаи ошибки IntuneMAMComplianceStatus.

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

После выполнения всех указанных выше условий выхода ваше приложение успешно интегрировано с поддержкой условного доступа защиты приложений. Следующий раздел, этап 7: Функции веб-представления могут потребоваться или не потребоваться в зависимости от желаемой поддержки политики защиты приложений в вашем приложении.