Sdk d’application Intune pour iOS - Prise en charge de l’autorité de certification App Protection (facultatif)
L’accès conditionnel protection des applications bloque l’accès aux jetons de serveur jusqu’à ce qu’Intune ait confirmé l’application de la stratégie de protection des applications. Cette fonctionnalité nécessite des modifications dans vos flux d’utilisateurs d’ajout. Une fois qu’un client active l’autorité de certification App Protection, les applications du locataire de ce client qui accèdent aux ressources protégées ne peuvent pas acquérir un jeton d’accès, sauf si elles prennent en charge cette fonctionnalité.
Remarque
Ce guide est divisé en plusieurs étapes distinctes. Commencez par passer en revue l’étape 1 : Planifier l’intégration.
Étape 6 : Prise en charge de l’autorité de certification App Protection
Objectifs de la phase
- En savoir plus sur les différentes API qui peuvent être utilisées pour prendre en charge l’accès conditionnel protection des applications dans l’application iOS
- Intégrez l’accès conditionnel protection des applications à votre application et aux 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 App Protection dans votre application.
- Application iOS Authenticator
- Bibliothèque d’authentification MSAL 1.0 ou ultérieure
Flux de correction MAM-CA
Nouvelles API
La plupart des nouvelles API se trouvent dans IntuneMAMComplianceManager.h. L’application doit connaître trois différences de comportement expliquées ci-dessous.
Nouveau comportement | Description |
---|---|
App → ADAL/MSAL : Acquérir un 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 pendant 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, elle ne reçoit pas de jeton d’accès et doit être corrigée pour récupérer les données du serveur. |
Kit de développement logiciel (SDK) App → Intune : appeler remediateComplianceForIdentity | Lorsqu’une application reçoit un ERROR_SERVER_PROTECTION_POLICY_REQUIRED d’ADAL ou msALErrorServerProtectionPoliciesRequired de MSAL, elle doit appeler [[Instance IntuneMAMComplianceManager] remediateComplianceForIdentity] pour permettre à Intune d’inscrire l’application et d’appliquer la stratégie. L’application peut être redémarrée pendant cet appel. Si l’application doit 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 l’une de ces API plus anciennes. |
Application → Intune : notification de correction 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 état conforme, l’application doit appeler la réinitialisation sélective pour supprimer tout contenu d’entreprise. Si nous ne pouvons pas atteindre un état conforme, l’application doit afficher localisée le message d’erreur et la chaîne de titre fournis par withErrorMessage et andErrorTitle. |
Exemple de méthode hasComplianceStatus d’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 App Protection en ajoutant une variable de fonctionnalités client à leur configuration MSAL/ADAL. Les valeurs suivantes sont requises : claims = {"access_token » :{"xms_cc » :{"values » :["protapp"]}}}
Référence de 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 récupérer l’ID d’objet Entra pour le paramètre accountId des API de correction de conformité du SDK MAM, vous devez effectuer les opérations suivantes :
- Tout d’abord, obtenez 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 fractionnant la chaîne sur le « . », puis utilisez cette valeur pour le paramètre accountId dans l’API remediation remediateComplianceForAccountId.
Critères de sortie
Configuration d’un utilisateur de test pour l’autorité de certification App Protection
- Connectez-vous avec vos informations d’identification d’administrateur à https://portal.azure.com.
- Sélectionnez Microsoft Entra ID>Sécurité>Accès> conditionnelNouvelle stratégie. Créez une stratégie d’accès conditionnel.
- Configurez la stratégie d’accès conditionnel en définissant les éléments suivants :
- Renseignez le champ Nom .
- Activation de la stratégie.
- Affectation de la stratégie à un utilisateur ou à un groupe.
- Attribuer 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.
- Accordez des contrôles d’accès en sélectionnant Contrôle >d’accèsAccorder l’accès>Exiger la stratégie de protection des applications.
- Lorsque vous avez terminé de configurer la stratégie, sélectionnez Créer pour enregistrer la stratégie et l’appliquer.
- Activez la stratégie.
- Vous devez également vous assurer que les utilisateurs sont ciblés pour les stratégies GAM.
Cas de test
Cas de test | Procédure de test | Résultat attendu |
---|---|---|
GAM-CA toujours appliqué | Vérifiez que l’utilisateur est ciblé à la fois pour l’autorité de certification App Protection et la stratégie GAM avant de s’inscrire dans 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. |
GAM-CA appliqué après l’inscription de l’utilisateur | L’utilisateur doit déjà être connecté à l’application, mais pas ciblé pour l’autorité de certification App Protection. | Cibler l’utilisateur pour l’autorité de certification App Protection dans la console et vérifier que vous gérez correctement la correction gam |
Non-conformité MAM-CA | Configurez une stratégie d’autorité de certification App Protection, mais n’affectez pas de stratégie GAM. | 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 désormais intégrée à la prise en charge de l’autorité de certification App Protection. La section suivante, Étape 7 : Fonctionnalités d’affichage web, peut être nécessaire ou non, en fonction de la prise en charge de la stratégie de protection des applications souhaitée par votre application.