Intune App SDK per iOS - Protezione app Supporto CA (facoltativo)

Protezione delle app L'accesso condizionale blocca l'accesso ai token del server finché Intune non conferma che i criteri di protezione delle app sono stati applicati. Questa funzionalità richiede modifiche ai flussi utente di aggiunta. Quando un cliente abilita la CA di protezione delle app, le applicazioni nel tenant di tale cliente che accedono alle risorse protette non saranno in grado di acquisire un token di accesso a meno che non supportino questa funzionalità.

Nota

Questa guida è suddivisa in diverse fasi distinte. Inizia esaminando la fase 1: pianifica l'integrazione.

Fase 6: Supporto CA per la protezione delle app

Obiettivi della fase

  • Informazioni sulle diverse API che possono essere usate per supportare l'accesso condizionale di Protezione delle app nell'app iOS
  • Integrare Protezione app Accesso condizionale all'app e agli utenti.
  • Testare l'integrazione precedente con l'app e gli utenti.

Dipendenze

Oltre a Intune SDK, sono necessari questi due componenti per abilitare App Protection CA nell'app.

  1. App iOS Authenticator
  2. Libreria di autenticazione MSAL 1.0 o successiva

Flusso di correzione MAM-CA

Diagramma del flusso di correzione MAM-CA.

Flusso del processo di conformità MAM

Diagramma del flusso del processo di conformità MAM.

Nuove API

La maggior parte delle nuove API è disponibile in IntuneMAMComplianceManager.h. L'app deve essere a conoscenza di tre differenze di comportamento spiegate di seguito.

Nuovo comportamento Descrizione
App → ADAL/MSAL: acquisire token Quando un'applicazione tenta di acquisire un token, deve essere pronta a ricevere un ERROR_SERVER_PROTECTION_POLICY_REQUIRED. L'app può ricevere questo errore durante il flusso iniziale di aggiunta dell'account o quando accede a un token in un punto successivo del ciclo di vita dell'applicazione. Quando l'app riceve questo errore, non le verrà assegnato un token di accesso e deve essere corretta per recuperare i dati del server.
App → Intune SDK: chiamare remediateComplianceForIdentity Quando un'app riceve un ERROR_SERVER_PROTECTION_POLICY_REQUIRED da ADAL o MSALErrorServerProtectionPoliciesRequired da MSAL, deve chiamare [[IntuneMAMComplianceManager instance] remediateComplianceForIdentity] per consentire Intune di registrare l'app e applicare i criteri. L'app potrebbe essere riavviata durante la chiamata. Se l'app deve salvare lo stato prima del riavvio, può farlo nel metodo delegato restartApplication in IntuneMAMPolicyDelegate.

remediateComplianceForIdentity fornisce tutte le funzionalità di registerAndEnrollAccount e loginAndEnrollAccount. Pertanto, l'app non deve usare nessuna di queste API meno recenti.
App Intune →: Delegare la notifica di correzione Dopo che Intune ha recuperato e applicato i criteri, notifica all'app il risultato usando il protocollo IntuneMAMComplianceDelegate. Per informazioni su come l'app deve gestire ogni errore, vedere IntuneMAMComplianceStatus in IntuneComplianceManager.h. In tutti i casi, ad eccezione di IntuneMAMComplianceCompliant, l'utente non avrà un token di accesso valido.

Se l'app ha già contenuto gestito e non è in grado di entrare in uno stato conforme, l'applicazione deve chiamare la cancellazione selettiva per rimuovere qualsiasi contenuto aziendale.

Se non è possibile raggiungere uno stato conforme, l'app dovrebbe visualizzare localizzato il messaggio di errore e la stringa del titolo forniti da withErrorMessage e andErrorTitle.

Esempio per il metodo hasComplianceStatus di 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

Le app devono indicare il supporto per la CA di protezione delle app aggiungendo la variabile delle funzionalità client alla configurazione MSAL/ADAL. Sono necessari i seguenti valori: claims = {"access_token":{"xms_cc":{"values":["protapp"]}}}

Informazioni di riferimento sulla 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)

Per recuperare l'ID oggetto Microsoft Entra per il parametro accountId delle API di correzione della conformità dell'SDK MAM, è necessario eseguire la procedura seguente:

  • Ottenere prima di tutto l'ID homeAccountId da userInfo[MSALHomeAccountIdKey] all'interno dell'oggetto MSALError restituito da MSAL quando segnala ERROR_SERVER_PROTECTION_POLICY_REQUIRED all'app.
  • Il formato di homeAccountId è ObjectId.TenantId. Estrarre il valore ObjectId suddividendo la stringa in '.' e quindi usare tale valore per il parametro accountId nell'API di correzione remediateComplianceForAccountId.

Criteri di uscita

Configurazione di un utente di test per l'autorità di certificazione per la protezione delle app

  1. Accedi con le credenziali di amministratore a https://portal.azure.com.
  2. Selezionare Microsoft Entra IDAccesso>>condizionaleCrea nuovo criterio. Creare un nuovo criterio di accesso condizionale.
  3. Configurare i criteri di accesso condizionale impostando gli elementi seguenti:
    • Compilazione del campo Nome .
    • Abilitazione del criterio.
    • Assegnare il criterio a un utente o un gruppo.
  4. Assegnare app cloud. Selezionare Includi>tutte le app cloud. Come indicato nell'avviso, prestare attenzione a non configurare in modo errato questa impostazione. Ad esempio, se escludessi tutte le app cloud, ti bloccheresti fuori dalla console.
  5. Concedere i controlli di accesso selezionando Controlli> di accessoConcedi accessoRichiedi criterio> di protezione delle app.
  6. Al termine della configurazione del criterio, selezionare Crea per salvare il criterio e applicarlo.
  7. Abilita il criterio.
  8. È anche necessario assicurarsi che gli utenti siano destinati ai criteri di gestione di app per dispositivi mobili.

Casi di test

Caso di test Come eseguire il test Risultato atteso
MAM-CA sempre applicato Assicurarsi che l'utente sia destinato ai criteri CA e MAM di Protezione delle app prima di eseguire la registrazione nell'app. Verificare che l'app gestisca i casi di correzione descritti in precedenza e che possa ottenere un token di accesso.
MAM-CA applicato dopo la registrazione dell'utente L'utente deve essere già connesso all'app, ma non destinato per la CA di protezione delle app. Rivolgersi all'utente per la CA di protezione delle app nella console e verificare di gestire correttamente la correzione di MAM
Non conformità MAM-CA Configurare un criterio CA per la protezione delle app, ma non assegnare un criterio MAM. L'utente non deve essere in grado di acquisire un token di accesso. Ciò è utile per testare il modo in cui l'app gestisce i casi di errore IntuneMAMComplianceStatus.

Operazioni successive

Dopo aver completato tutti i criteri di uscita precedenti, l'app è ora integrata correttamente con il supporto CA di Protezione delle app. Sezione successiva, Fase 7: Le funzionalità di visualizzazione Web possono essere necessarie o meno, a seconda del supporto dei criteri di protezione delle app desiderato dall'app.