Kit de développement logiciel (SDK) d’application Intune pour iOS - Support d’autorité de certification pour la protection des applications (facultatif)

L’accès conditionnel de la protection des applications bloque l’accès aux jetons de serveur jusqu’à ce qu’Intune confirme que la stratégie de protection des applications a été appliquée. Cette fonctionnalité nécessite des modifications apportées à vos flux d’ajout d’utilisateur. Une fois qu’un client active l’autorité de certification Protection des applications, les applications du client de ce client qui accèdent aux ressources protégées ne peuvent pas acquérir de jeton d’accès à moins qu’elles ne prennent en charge cette fonctionnalité.

Remarque

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

Étape 6 : prise en charge de l’autorité de certification Protection des applications

Objectifs de la scène

  • Découvrez les différentes API qui peuvent être utilisées pour prendre en charge l’accès conditionnel de la protection des applications dans l’application iOS
  • Intégrez l’accès conditionnel de la protection des applications à votre application et à vos utilisateurs.
  • Testez l’intégration ci-dessus avec votre application et vos utilisateurs.

Dépendances

En plus du kit de développement logiciel (SDK) Intune, vous avez besoin de ces deux composants pour activer l’autorité de certification de protection des applications dans votre application.

  1. Application iOS Authenticator
  2. Bibliothèque d’authentification MSAL 1.0 ou ultérieure

Flux de correction MAM-CA

Diagramme du flux de correction MAM-CA.

Flux du processus de conformité de la gestion des applications

Diagramme du flux du processus de conformité de la GAM.

Nouvelles API

La plupart des nouvelles API se trouvent dans le IntuneMAMComplianceManager.h. L’application doit tenir compte des trois différences de comportement décrites ci-dessous.

Nouveau comportement Description
Application → ADAL/MSAL : Acquérir le jeton Lorsqu’une application tente d’acquérir un jeton, elle doit être prête à recevoir un ERROR_SERVER_PROTECTION_POLICY_REQUIRED. L’application peut recevoir cette erreur lors de son flux d’ajout de compte initial ou lors de l’accès à un jeton plus tard dans le cycle de vie de l’application. Lorsque l’application reçoit cette erreur, aucun jeton d’accès ne lui est accordé et doit être corrigée pour récupérer les données du serveur.
SDK → Intune d’application : Appeler remediateComplianceForIdentity Lorsqu’une application reçoit un ERROR_SERVER_PROTECTION_POLICY_REQUIRED d’ADAL ou MSALErrorServerProtectionPoliciesRequired de MSAL, elle doit appeler [[IntuneMAMComplianceManager instance] remediateComplianceForIdentity] pour Intune permettre d’inscrire l’application et d’appliquer la stratégie. Il est possible que l’application redémarre pendant cet appel. Si l’application a besoin d’enregistrer l’état avant de redémarrer, elle peut le faire dans la méthode restartApplication delegate dans IntuneMAMPolicyDelegate.

remediateComplianceForIdentity fournit toutes les fonctionnalités de registerAndEnrollAccount et loginAndEnrollAccount. Par conséquent, l’application n’a pas besoin d’utiliser aucune de ces anciennes API.
Application Intune → : Notification de mise à jour déléguée Une fois qu’Intune a récupéré et appliqué des stratégies, il informe l’application du résultat à l’aide du protocole IntuneMAMComplianceDelegate. Reportez-vous à IntuneMAMComplianceStatus dans IntuneComplianceManager.h pour plus d’informations sur la façon dont l’application doit gérer chaque erreur. Dans tous les cas, à l’exception d’IntuneMAMComplianceCompliant, l’utilisateur ne dispose pas d’un jeton d’accès valide.

Si l’application a déjà du contenu géré et n’est pas en mesure d’entrer un status conforme, l’application doit appeler l’effacement sélectif pour supprimer tout contenu d’entreprise.

Si nous ne parvenons pas à atteindre un état conforme, l’application devrait afficher localisée le message d’erreur et la chaîne de titre fournis par withErrorMessage et andErrorTitle.

Exemple de méthode hasComplianceStatus de 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

Les applications doivent indiquer la prise en charge de l’autorité de certification Protection des applications en ajoutant des variables de fonctionnalités client à leur configuration MSAL/ADAL. Les valeurs suivantes sont requises : claims = {"access_token » :{"xms_cc » :{"values » :["protapp"]}}}

Référence de la classe 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)

Pour extraire l’ID d’objet Microsoft Entra pour le paramètre accountId des API de correction de conformité du kit de développement logiciel (SDK) MAM, procédez comme suit :

  • Tout d’abord, récupérez le homeAccountId à partir de userInfo[MSALHomeAccountIdKey] dans l’objet MSALError renvoyé par MSAL lorsqu’il signale ERROR_SERVER_PROTECTION_POLICY_REQUIRED à l’application.
  • Ce homeAccountId est au format ObjectId.TenantId. Extrayez la valeur ObjectId en divisant la chaîne sur le « . », puis utilisez cette valeur pour le paramètre accountId dans l’API de correction remediateComplianceForAccountId.

Critères de sortie

Configuration d’un utilisateur de test pour l’autorité de certification Protection des applications

  1. Connectez-vous avec vos informations d’identification d’administrateur à https://portal.azure.com.
  2. Sélectionner Microsoft Entra IDAccès>>conditionnelCréer une stratégie. Créez une stratégie d’accès conditionnel.
  3. Configurez la stratégie d’accès conditionnel en définissant les éléments suivants :
    • Remplissage du champ Nom .
    • Activation de la stratégie.
    • Affectation de la stratégie à un utilisateur ou à un groupe.
  4. Affecter des applications cloud. Sélectionnez Inclure>toutes les applications cloud. Comme le note l’avertissement, veillez à ne pas mal configurer ce paramètre. Par exemple, si vous excluez toutes les applications cloud, vous vous verrouillez hors de la console.
  5. Accorder des contrôles d’accès en sélectionnant Contrôles >d’accèsAccorder l’accès>Exiger la stratégie de protection de l’application.
  6. Une fois que vous avez terminé de configurer la stratégie, sélectionnez Créer pour enregistrer la stratégie et l’appliquer.
  7. Activez la stratégie.
  8. Vous devez également vous assurer que les utilisateurs sont ciblés pour les stratégies MAM.

Cas de test

Cas d’essai Procédure de test Résultat attendu
MAM-CA toujours appliqué Assurez-vous que l’utilisateur est ciblé à la fois pour l’autorité de certification de la protection des applications et la stratégie GAM avant de l’inscrire à votre application. Vérifiez que votre application gère les cas de correction décrits ci-dessus et qu’elle peut obtenir un jeton d’accès.
MAM-CA appliqué après l’inscription de l’utilisateur L’utilisateur doit déjà être connecté à l’application, mais il n’est pas ciblé par l’autorité de certification de protection des applications. Ciblez l’utilisateur pour l’autorité de certification Protection des applications dans la console et vérifiez que vous gérez correctement la correction GAM
Non-conformité à MAM-CA Configurez une stratégie d’autorité de certification de protection des applications, mais n’attribuez pas de stratégie MAM. L’utilisateur ne doit pas être en mesure d’acquérir un jeton d’accès. Cela est utile pour tester la façon dont votre application gère les cas d’erreur IntuneMAMComplianceStatus.

Étapes suivantes

Une fois que vous avez rempli tous les critères de sortie ci-dessus, votre application est maintenant intégrée avec succès à la prise en charge de l’autorité de certification Protection des applications. La section suivante, Étape 7 : Les fonctionnalités d’affichage Web peuvent être requises ou non, en fonction de la prise en charge de la stratégie de protection des applications souhaitée par votre application.