Condividi tramite


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

L'accesso condizionale di Protezione app blocca l'accesso ai token del server fino a quando Intune non ha confermato l'applicazione dei criteri di protezione delle app. Questa funzionalità richiede modifiche ai flussi utente aggiunti. Quando un cliente abilita la CA di Protezione app, le applicazioni nel tenant del cliente che accedono alle risorse protette non potranno acquisire un token di accesso a meno che non supportino questa funzionalità.

Nota

Questa guida è suddivisa in diverse fasi distinte. Per iniziare, esaminare la fase 1: Pianificare l'integrazione.

Fase 6: Supporto della CA di Protezione app

Obiettivi di fase

  • Informazioni sulle diverse API che possono essere usate per supportare l'accesso condizionale di Protezione app all'interno dell'app iOS
  • Integrare l'accesso condizionale di Protezione app 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 la CA di Protezione app nell'app.

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

Flusso di correzione MAM-CA

Diagramma del flusso di correzione MAM-CA.

Nuove API

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

Nuovo comportamento Descrizione
App → ADAL/MSAL: Acquisire il token Quando un'applicazione tenta di acquisire un token, deve essere preparata per ricevere un ERROR_SERVER_PROTECTION_POLICY_REQUIRED. L'app può ricevere questo errore durante il flusso di aggiunta dell'account iniziale o quando accede a un token più avanti nel ciclo di vita dell'applicazione. Quando l'app riceve questo errore, non gli verrà concesso un token di accesso e dovrà essere corretti per recuperare i dati del server.
App → Intune SDK: Call remediateComplianceForIdentity Quando un'app riceve un ERROR_SERVER_PROTECTION_POLICY_REQUIRED da ADAL o MSALErrorServerProtectionPoliciesRequired da MSAL, deve chiamare [[Istanza di IntuneMAMComplianceManager] remediateComplianceForIdentity] per consentire a Intune di registrare l'app e applicare i criteri. L'app potrebbe essere riavviata durante questa 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 → di Intune: delegare la notifica di correzione Dopo aver recuperato e applicato i criteri, Intune notificherà 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 immettere uno stato conforme, l'applicazione deve chiamare la cancellazione selettiva per rimuovere qualsiasi contenuto aziendale.

Se non è possibile raggiungere uno stato conforme, l'app deve visualizzare il messaggio di errore localizzato 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 app aggiungendo una variabile di funzionalità client alla configurazione MSAL/ADAL. Sono necessari i valori seguenti: 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 Entra per il parametro accountId delle API di correzione della conformità di MAM SDK, è necessario eseguire le operazioni seguenti:

  • Ottenere prima di tutto homeAccountId da userInfo[MSALHomeAccountIdKey] all'interno dell'oggetto MSALError inviato da MSAL quando segnala ERROR_SERVER_PROTECTION_POLICY_REQUIRED all'app.
  • Questo homeAccountId avrà il formato ObjectId.TenantId. Estrarre il valore ObjectId suddividendo la stringa in '.' e quindi usare tale valore per il parametro accountId in remediation API remediateComplianceForAccountId.

Criteri di uscita

Configurazione di un utente di test per la CA di Protezione app

  1. Accedere con le credenziali di amministratore a https://portal.azure.com.
  2. Selezionare Microsoft Entra IDSecurity Conditional AccessNew policy (Nuovo criterio perl'accesso> condizionaledi MicrosoftEntra ID > Security>). Creare un nuovo criterio di accesso condizionale.
  3. Configurare i criteri di accesso condizionale impostando gli elementi seguenti:
    • Compilare il campo Nome .
    • Abilitazione dei criteri.
    • Assegnazione dei criteri a un utente o a un gruppo.
  4. Assegnare app cloud. Selezionare Includi>tutte le app cloud. Come nota l'avviso, prestare attenzione a non configurare erroneamente questa impostazione. Ad esempio, se sono state escluse tutte le app cloud, è possibile bloccarsi dalla console.
  5. Concedere controlli di accesso selezionando Controlli> di accessoConcedi accesso>Richiedi criteri 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 MAM.

Test case

Test Case Come eseguire il test Risultato previsto
MAM-CA sempre applicata Prima di eseguire la registrazione nell'app, verificare che l'utente sia destinato ai criteri DI PROTEZIONE APP e MAM. Verificare che l'app gestisca i casi di correzione descritti in precedenza e che l'app possa ottenere un token di accesso.
MAM-CA applicata dopo la registrazione dell'utente L'utente deve essere già connesso all'app, ma non è destinato alla CA di Protezione app. Impostare come destinazione l'utente per l'autorità di certificazione di Protezione app nella console e verificare di gestire correttamente la correzione MAM
Non conformità MAM-CA Configurare un criterio CA di Protezione app, ma non assegnare criteri MAM. L'utente non deve essere in grado di acquisire un token di accesso. Questa operazione è utile per testare il modo in cui l'app gestisce i casi di errore in IntuneMAMComplianceStatus.

Operazioni successive

Dopo aver completato tutti i criteri di uscita precedenti, l'app è ora integrata correttamente con il supporto della CA di Protezione app. La sezione successiva, Fase 7: Funzionalità di visualizzazione Web, può essere necessaria o meno, a seconda del supporto dei criteri di protezione delle app desiderati per l'app.