Passaggio 3: Integrazione di Intune SDK nell'app iOS

Nota

Questa guida è suddivisa in diverse fasi distinte. Per iniziare, rivedere Pianificare l'integrazione.

Obiettivi della fase

  • Scaricare l'SDK dell'app Intune.
  • Informazioni sui file inclusi in Intune App SDK.
  • Fare riferimento a Intune App SDK nell'applicazione.
  • Verificare che Intune App SDK sia incluso correttamente nella compilazione.
  • Registrare i nuovi account per la gestione di MAM dopo l'autenticazione con MSAL.
  • Per rimuovere i dati aziendali, annulla la registrazione degli account al momento della disconnessione
  • (Scelta consigliata) Incorpora l'accesso MAM nella tua app.

Prerequisiti

  • È necessario un computer macOS con Xcode 16.0 o versione successiva.

  • La destinazione dell'app deve essere iOS 16.0 o versione successiva.

  • Esaminare le condizioni di licenza di Intune App SDK per iOS. Stampare e conservare una copia delle condizioni di licenza per i propri archivi. Scaricando e utilizzando Intune App SDK per iOS, l'utente accetta tali condizioni di licenza. Qualora non le accetti, non dovrà usare il software.

  • Scaricare i file per l'SDK dell'app Intune per iOS su GitHub.

Contenuto del repository SDK

  • IntuneMAMSwift.xcframework: Framework dinamico di Intune App SDK. È consigliabile collegare questo framework alle app/estensioni per abilitare la gestione delle applicazioni client Intune. Tuttavia, alcuni sviluppatori potrebbero preferire i vantaggi in termini di prestazioni del framework statico (IntuneMAMStatic.xcframework).

  • IntuneMAMStatic.xcframework: Framework statico di Intune App SDK. Gli sviluppatori potrebbero scegliere di collegare il framework statico anziché il framework dinamico. Poiché il codice eseguibile di un framework statico viene incorporato direttamente nel binario dell'app/estensione in fase di compilazione, l'uso della libreria statica offre alcuni vantaggi in termini di prestazioni in fase di avvio. Tuttavia, se l'app include estensioni, il collegamento del framework statico all'app e alle estensioni comporta dimensioni maggiori del bundle dell'app. Il codice eseguibile è incorporato in ogni binario di app/estensione. Al contrario, quando si usa il framework dinamico, le app e le estensioni possono condividere lo stesso file binario dell'SDK di Intune, con conseguente riduzione delle dimensioni dell'app.

  • IntuneMAMSwiftStub.xcframework: Framework stub Swift di App SDK per Intune. Questo framework è una dipendenza necessaria di IntuneMAMSwift.xcframework e IntuneMAMStatic.xcframework, che le app o le estensioni devono collegare.

  • IntuneMAMConfigurator: uno strumento usato per configurare Info.plist dell'app o dell'estensione con le modifiche minime necessarie per la gestione di Intune. A seconda della funzionalità dell'app o dell'estensione, potrebbe essere necessario apportare modifiche manuali al file Info.plist.

  • libIntuneMAMSwift.xcframework: libreria statica di Intune App SDK. Questa variante di Intune MAM iOS SDK è deprecata e rimossa in un aggiornamento futuro. È consigliabile non collegare la libreria statica e collegare invece le app/estensioni al framework dinamico (IntuneMAMSwift.xcframework) o al framework statico (IntuneMAMStatic.xcframework) menzionato in precedenza.

  • IntuneMAMResources.bundle: un bundle di risorse che contiene le risorse su cui si basa l'SDK. Il bundle di risorse è richiesto solo per le app che integrano la libreria statica deprecata (libIntuneMAMSwift.xcframework) e la rimuoverà in un aggiornamento futuro.

Funzionamento di Intune App SDK

L'obiettivo di Intune App SDK per iOS è aggiungere funzionalità di gestione alle applicazioni iOS con modifiche minime al codice. Meno modifiche al codice c'è, minore è il time-to-market, ma senza compromettere la coerenza e la stabilità dell'applicazione mobile.

Flusso di processo

Il diagramma seguente illustra il flusso di processo di Intune App SDK per iOS:

Diagramma architettonico di alto livello per Microsoft Intune.

Compilare l'SDK nell'app per dispositivi mobili

Importante

Intune rilascia regolarmente aggiornamenti per l'SDK dell'app Intune. Controllare regolarmente la disponibilità di aggiornamenti nell'SDK app Intune per iOS e incorporarli nel ciclo di rilascio dello sviluppo software per assicurarsi che le app supportino le impostazioni più recenti dei criteri di protezione delle app.

Per abilitare l'SDK dell'app Intune, seguire questa procedura:

  1. Collegare uno o IntuneMAMSwift.xcframework alla destinazione: trascinare il bundle xcframework nell'elenco Framework, Librerie e Contenuto incorporato della destinazione del progetto.IntuneMAMStatic.xcframework Ripeti questi passaggi per IntuneMAMSwiftStub.xcframework. Per l'app principale, seleziona "Incorpora & firma" nella colonna "Incorpora" per entrambi gli xcframework aggiunti. Per eventuali estensioni, seleziona "Non incorporare".

    Intune App SDK iOS Framework: Xcode Frameworks, librerie e esempio di contenuto incorporato

  2. Aggiungi questi framework iOS al progetto:

    • MessageUI.framework
    • Security.framework
    • CoreServices.framework
    • SystemConfiguration.framework
    • libsqlite3.tbd
    • libc++.tbd
    • ImageIO.framework
    • LocalAuthentication.framework
    • AudioToolbox.framework
    • QuartzCore.framework
    • WebKit.framework
    • MetricKit.framework
  3. Abilita la condivisione del portachiavi (se non è già abilitata) scegliendo Funzionalità in ogni destinazione del progetto e abilitando l'opzione Condivisione portachiavi . La condivisione del portachiavi è necessaria per procedere con il passaggio successivo.

    Nota

    Il profilo di provisioning deve supportare i nuovi valori di condivisione del portachiavi. I gruppi di accesso al portachiavi devono supportare un carattere jolly. Puoi verificarlo aprendo il file .mobileprovision in un editor di testo, cercando keychain-access-groups e assicurandoti di avere un carattere jolly. Ad esempio:

    <key>keychain-access-groups</key>
    <array>
    <string>YOURBUNDLESEEDID.*</string>
    </array>
    
  4. Dopo aver abilitato la condivisione del portachiavi, seguire la procedura per creare un gruppo di accesso separato in cui Intune App SDK archivia i dati. Puoi creare un gruppo con accesso al portachiavi utilizzando l'interfaccia utente o il file dei diritti. Se si usa l'interfaccia utente per creare il gruppo di accesso portachiavi, assicurarsi di seguire questa procedura:

    1. Se l'app per dispositivi mobili non ha alcun gruppo di accesso al portachiavi definito, aggiungere l'ID bundle dell'app come primo gruppo.

    2. Aggiungi il gruppo com.microsoft.intune.mam del portachiavi condiviso ai gruppi di accesso esistenti. Intune App SDK usa questo gruppo di accesso per archiviare i dati.

    3. Aggiungere com.microsoft.adalcache ai gruppi di accesso esistenti.

      App SDK di Intune iOS: condivisione portachiavi

      Nota

      Se MSAL è stato configurato per l'uso di un gruppo di accesso portachiavi personalizzato anziché quello predefinito di , non è necessario specificare questo gruppo di com.microsoft.adalcacheaccesso portachiavi qui. Specifica invece il gruppo portachiavi personalizzato. È inoltre consigliabile configurare Intune per l'uso dello stesso gruppo di accesso personalizzato tramite l'impostazione ADALCacheKeychainGroupOverride all'interno del dizionario Info.plist IntuneMAMSettings.

    4. Se stai modificando direttamente il file dei diritti, anziché utilizzare l'interfaccia utente di Xcode per creare i gruppi di accesso al portachiavi, anteponi ai gruppi di accesso al portachiavi ( $(AppIdentifierPrefix) Xcode lo gestisce automaticamente). Ad esempio:

      • $(AppIdentifierPrefix)com.microsoft.intune.mam
      • $(AppIdentifierPrefix)com.microsoft.adalcache

      Nota

      Un file di diritti è un file XML univoco per l'applicazione mobile. Viene usato per specificare autorizzazioni e funzionalità speciali nell'app iOS. Se l'app non disponeva in precedenza di un file di diritti, l'abilitazione della condivisione del portachiavi (passaggio 3) avrebbe dovuto causare la generazione da parte di Xcode per l'app. Assicurarsi che l'ID bundle dell'app sia la prima voce nell'elenco.

  5. Includi ogni protocollo a UIApplication canOpenURL cui l'app passa nella LSApplicationQueriesSchemes matrice del file Info.plist dell'app. Per ogni protocollo elencato in questa matrice, aggiungere una copia del protocollo aggiunto alla -intunemam matrice. Aggiungi anche questi valori alla matrice: http-intunemam, https-intunemam, , microsoft-edge-http-intunemammicrosoft-edge-https-intunemam, zipswanderalookoutwork-aseskycurelacoonsecuritysmart-nssmsecmvisionmobilebetteractiveshieldscmxe .intunemam-mtd Se l'app usa il protocollo mailto:, aggiungere ms-outlook-intunemam alla matrice. Salva le modifiche prima di procedere con il passaggio successivo.

    Se l'app esaurisce lo spazio nell'elenco LSApplicationQueriesSchemes, può rimuovere gli schemi "-intunemam" per le app note per implementare anche l'SDK MAM di Intune. Quando l'app rimuove "scheme-intunemam" dall'elenco LSApplicationQueriesSchemes, canOpenURL() può restituire risposte non corrette per tali schemi. Per risolvere questo problema, chiamare [IntuneMAMPolicy isURLAllowed:url isKnownManagedAppScheme:YES] invece questo schema. Questa chiamata restituisce un risultato se NO il criterio blocca l'apertura dell'URL. Se restituisce true, l'app può chiamare canOpenURL() con un'identità vuota per determinare se l'URL può essere aperto. Ad esempio:

    BOOL __block canOpen = NO;
    if([policy isURLAllowed:urlForKnownManagedApp isKnownManagedAppScheme:YES])
    {
        [[IntuneMAMPolicyManager instance] setCurrentThreadAccountId:"" forScope:^{
        canOpen = [[UIApplication sharedApplication] canOpenURL:urlForKnownManagedApp];
        }];
    }
    
  6. Se l'app non usa già FaceID, assicurarsi che la chiave NSFaceIDUsageDescription Info.plist sia configurata con un messaggio predefinito. Questo passaggio è necessario affinché iOS possa far sapere all'utente come l'app intende utilizzare FaceID. Un'impostazione dei criteri di protezione delle app di Intune consente di usare FaceID come metodo per l'accesso alle app quando configurato dall'amministratore IT.

  7. Usa lo strumento IntuneMAMConfigurator incluso nel repository SDK per completare la configurazione di Info.plist dell'app. Lo strumento ha tre parametri:

    Proprietà Modalità di utilizzo
    - io <Path to the input plist>
    - e <Path to the entitlements file>
    - o (Facoltativo) <Path to the output plist>

    Se il parametro '-o' non è specificato, il file di input viene modificato sul posto. Lo strumento è idempotente e deve essere rieseguito ogni volta che si apportano modifiche al file Info.plist o ai diritti dell'app. È inoltre consigliabile scaricare ed eseguire la versione più recente dello strumento quando si aggiorna l'SDK di Intune, nel caso in cui i requisiti di configurazione di Info.plist siano cambiati nella versione più recente.

Nota

Se si ha un'app SwiftUI, assicurarsi che UISceneConfigurations il dizionario all'interno del UIApplicationSceneManifest file Info.pist non sia mancante o vuoto. La mancata configurazione di questa impostazione può impedire a Intune SDK di proteggere l'app nonostante i criteri di protezione dell'app siano stati applicati correttamente. Se non è stato impostato un valore specifico per il UISceneConfigurations valore di , è possibile usare questa configurazione predefinita:

<key>UISceneConfigurations</key>
<dict>
<key>UIWindowSceneSessionRoleApplication</key>
<array>
<dict>
<key>UISceneConfigurationName</key>
<string>Default Configuration</string>
<key>UISceneDelegateClassName</key>
<string>$(PRODUCT_MODULE_NAME).SceneDelegate</string>
</dict>
</array>
</dict>

Impostazioni e funzionalità di compilazione Xcode

L'app deve avere sia "Strip Swift Symbols" (STRIP_SWIFT_SYMBOLS) che "Enable Bitcode" (ENABLE_BITCODE) impostati su NO nelle impostazioni della build Xcode. Se l'applicazione include la funzionalità "Sicurezza avanzata" disponibile in Xcode 26+, DEVI disabilitare le opzioni "Autentica puntatori" e "Abilita memoria piattaforma di sola lettura".

Integrazione di un'estensione del provider di file

Le estensioni del provider di file hanno requisiti di memoria specifici che potrebbero rendere difficile l'integrazione dell'SDK completo. Per semplificare le cose, c'è una libreria libIntuneMAMSwiftFileProvider.xcframeworkstatica , che è una versione ridotta dell'SDK specifica per le estensioni del provider di file. Si noti che questa libreria è per la parte non dell'interfaccia utente dell'estensione FileProvider. Devi integrare l'SDK completo nell'estensione dell'interfaccia utente del provider di file.

Per integrare una di queste librerie con l'estensione del provider di file, segui i passaggi per l'integrazione dell'SDK come libreria statica. Assicurati di includere ContainingAppBundleId l'impostazione.

Integrazione di un'estensione provider di file non replicata

L'app usa un provider di file non replicato se implementa il protocollo NSFileProviderExtension. Tutti i provider di file creati prima di iOS 16.0 non sono replicati.

In - startProvidingItemAtURL:completionHandler: verificare se è necessario crittografare i file usando [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles]. Usare encryptFile:forAccountId: API in IntuneMAMFileProtectionManager per la crittografia effettiva dei file. Inoltre, condividi una copia del file quando è necessaria la crittografia, poiché non desideri archiviare una copia crittografata del file nel tuo archivio cloud.

In - importDocumentAtURL:toParentItemIdentifier:completionHandler: controlla se il file è crittografato usando l'API isFileEncrytped: in IntuneMAMFileProtectionManager. In caso affermativo, decrittografarlo usando l'API decryptFile:toCopyPath: di IntuneMAMFileProtectionManager. Nelle app con più identità, controllare anche l'API canReceiveSharedFile: nell'IntuneMAMPolicy del proprietario di destinazione per determinare se il proprietario può ricevere il file.

Integrazione di un'estensione del provider di file replicata

L'app usa un provider di file replicato se implementa il protocollo NSFileProviderReplicatedExtension (aggiunto in iOS 16.0).

In - fetchContentsForItemWithIdentifier:version:request:completionHandler: verificare se è necessario crittografare i file usando [[IntuneMAMPolicy instance]shouldFileProviderEncryptFiles]. Usare l'API encryptFile:forAccountId: in IntuneMAMFileProtectionManager per la crittografia effettiva dei file. Condividi una copia del file quando è necessaria la crittografia, perché non vuoi archiviare una copia crittografata del file nel tuo archivio cloud.

In - createItemBasedOnTemplate:fields:contents:options:request:completionHandler: controlla se il file è crittografato usando l'API isFileEncrypted: in IntuneMAMFileProtectionManager. In caso affermativo, decrittografarlo usando l'API decryptFile:toCopyPath: di IntuneMAMFileProtectionManager. Nelle app con più identità, controllare anche l'API canReceiveSharedFile: nell'IntuneMAMPolicy del proprietario di destinazione per determinare se il proprietario può ricevere il file.

In qualsiasi posizione in cui il provider di file replicato crea e passa un elemento NSFileProviderItem al sistema, chiamare l'API protectFileProviderItem:forAccountId: di IntuneMAMFileProtectionManager con l'identità del proprietario dell'elemento. A seconda della posizione in cui l'oggetto NSFileProviderItem viene creato e salvato in modo permanente all'interno dell'estensione, potrebbe essere necessario eseguire questa operazione in ognuno dei metodi di protocollo di NSFileProviderReplicatedExtension.

Configurare le impostazioni per Intune App SDK

È possibile usare il dizionario IntuneMAMSettings nel file Info.plist dell'applicazione per installare e configurare l'SDK dell'app Intune. Se il dizionario IntuneMAMSettings non è visibile nel file Info.plist, è necessario crearlo.

Nel dizionario IntuneMAMSettings è possibile definire le impostazioni supportate seguenti per configurare Intune App SDK.

Le sezioni precedenti trattano alcune di queste impostazioni e alcune non si applicano a tutte le app.

Impostazione Tipo Definizione Obbligatorio?
ADALClientId Stringa Identificatore client Microsoft Entra dell'app. Obbligatorio per tutte le app.
ADALAutorità Stringa Autorità Microsoft Entra in uso dell'app. È consigliabile usare il proprio ambiente in cui sono configurati gli account di Microsoft Entra. Per ulteriori informazioni, vedere Opzioni di configurazione dell'applicazione. Necessario se l'app è un'applicazione line-of-business personalizzata creata per l'uso all'interno di una singola organizzazione/tenant di Microsoft Entra. Se questo valore è assente, viene usata l'autorità comune di Microsoft Entra (supportata solo per le app multi-tenant).
ADALRedirectUri Stringa URI di reindirizzamento di Microsoft Entra dell'app. ADALRedirectUri o ADALRedirectScheme è necessario per tutte le app.
ADALRedirectScheme Stringa Schema di reindirizzamento di Microsoft Entra ID dell'app. Può essere usato al posto di ADALRedirectUri se l'URI di reindirizzamento dell'applicazione è nel formato scheme://bundle_id. ADALRedirectUri o ADALRedirectScheme è necessario per tutte le app.
ADALLogOverrideDisabled Booleano Specifica se l'SDK instrada tutti i log MSAL (incluse le chiamate MSAL dall'app, se presenti) al proprio file di log. Il valore predefinito è NO. Impostato su YES se l'app imposta il proprio callback del log MSAL. Facoltativo.
ADALCacheKeychainGroupOverride Stringa Specifica il gruppo portachiavi da usare per la cache MSAL, invece di "com.microsoft.adalcache". Il sistema lo prefissa automaticamente in fase di esecuzione. Facoltativo.
AppGroupIdentifiers Matrice di stringhe Matrice di gruppi di app dalla sezione dei com.apple.security.application-groups diritti dell'app. Obbligatorio se l'app usa gruppi di applicazioni.
ContainingAppBundleId Stringa Specifica l'ID bundle dell'applicazione che contiene l'estensione. Obbligatorio per le estensioni iOS.
AutoEnrollOnLaunch Booleano Specifica se l'app deve tentare di eseguire automaticamente la registrazione all'avvio se viene rilevata un'identità gestita esistente e non è ancora stata eseguita. Il valore predefinito è NO.

Nota: Se non viene trovata alcuna identità gestita o non è disponibile alcun token valido nella cache MSAL, la registrazione non riesce automaticamente, a meno che non MAMPolicyRequired sia YES.
Facoltativo. Il valore predefinito è NO.
MAMPolicyRequired Booleano Specifica se l'avvio dell'app è bloccato se non ha un criterio di protezione dell'app di Intune. Il valore predefinito è NO.

Nota: Le app non possono essere inviate all'App Store con questa opzione impostata su SÌ. Quando si imposta su SÌ, AutoEnrollOnLaunch dovrebbe essere anche SÌ.
Facoltativo. Il valore predefinito è NO.
MAMPolicyWarnAbsent Booleano Specifica se l'app avvisa l'utente durante l'avvio se non sono presenti criteri di protezione dell'app Intune.

Nota: Gli utenti possono comunque continuare dopo aver ignorato l'avviso.
Facoltativo. Il valore predefinito è NO.
MultiIdentity Booleano Specifica se l'app è in grado di riconoscere più identità. Per ulteriori informazioni, consulta la documentazione sull'identità multipla. Facoltativo. Il valore predefinito è NO.
MultiIdentityCancelDisabled Booleano Disabilita il pulsante Annulla nelle schermate dell'interfaccia utente di avvio condizionale di Intune nelle applicazioni con più identità. Se non è impostato su Sì, l'app deve gestire il codice di IntuneMAMSwitchIdentityResultCanceled errore. Vedere Cambiare identità. Facoltativo. Il valore predefinito è NO.
SafariViewControllerBlockedOverride Booleano Disabilita gli hook SafariViewController di Intune per abilitare l'autenticazione MSAL tramite SFSafariViewController, SFAuthSession o ASWebAuthSession.

Nota: Un pulsante attività configurata viene visualizzato solo se la visualizzazione non è gestita ed è impostato su SÌ.
Facoltativo. Il valore predefinito è NO.

Attenzione: Può causare perdite di dati se usato in modo errato.
SplashIconFile
SplashIconFile~ipad
Stringa Specifica il file dell'icona splash (avvio) di Intune. Facoltativo.
SplashDuration Numero Tempo minimo in secondi in cui viene visualizzata la schermata di avvio di Intune. L'impostazione predefinita è 1.5. Facoltativo.
BackgroundColor Stringa Specifica il colore di sfondo per i componenti dell'interfaccia utente di Intune SDK. Accetta #XXXXXX OR un valore esadecimale senza il simbolo cancelletto. Facoltativo. Il colore di sfondo predefinito è il sistema.
ForegroundColor Stringa Specifica il colore di primo piano/testo per i componenti dell'interfaccia utente. Accetta #XXXXXX o esadecimale senza cancelletto. Facoltativo. Il valore predefinito è il colore dell'etichetta di sistema.
Colore d'accento Stringa Specifica il colore principale per i componenti dell'interfaccia utente (pulsanti, evidenziazione casella PIN). Accetta #XXXXXX o esadecimale senza cancelletto. Facoltativo. Il valore predefinito è il blu di sistema.
SecondaryBackgroundColor Stringa Specifica il colore di sfondo secondario per le schermate MTD. Accetta #XXXXXX o esadecimale senza cancelletto. Facoltativo. Il valore predefinito è il bianco.
SecondaryForegroundColor Stringa Specifica il colore di primo piano secondario per le schermate MTD. Accetta #XXXXXX o esadecimale senza cancelletto. Facoltativo. Il valore predefinito è grigio.
SupportsDarkMode Booleano Specifica se i colori dell'interfaccia utente seguono la modalità scura di sistema quando non sono impostati colori espliciti. Facoltativo. Il valore predefinito è SÌ.
MAMTelemetryDisabled Booleano Specifica se i dati di telemetria vengono inviati al back-end. Facoltativo. Il valore predefinito è NO.
MAMTelemetryUsePPE Booleano Invia la telemetria al back-end PPE. Utile per testare le app in modo che i dati non si mescolino con i dati dei clienti. Facoltativo. Il valore predefinito è NO.
MaxFileProtectionLevel Stringa Specifica il valore massimo NSFileProtectionType supportato dall'app. Sostituisce i criteri se il servizio invia un livello superiore.

Valori possibili: NSFileProtectionComplete, NSFileProtectionCompleteUnlessOpen, , NSFileProtectionCompleteUntilFirstUserAuthenticationNSFileProtectionNone.

Avviso: Con NSFileProtectionComplete, l'app perde l'accesso ai file protetti ~10 secondi dopo il blocco del dispositivo, il che può interrompere componenti come i database locali. Le app con interfaccia utente per la schermata di blocco devono usare NSFileProtectionCompleteUntilFirstUserAuthentication.
Facoltativo. Il valore predefinito è NSFileProtectionComplete.
OpenInActionExtension Booleano Impostare su YES per le estensioni Apri in azione. Vedere Condivisione dei dati tramite UIActivityViewController. Facoltativo.
TreatAllWebViewsAsUnmanaged Booleano Considera tutte le visualizzazioni Web come non gestite per l'imposizione di taglio/copia/incolla. Vedere Visualizzazione di contenuti Web. Facoltativo. Il valore predefinito è NO.
WebViewHandledURLSchemes Matrice di stringhe Schemi URL gestiti da WebView dell'app. Obbligatorio se WebView gestisce collegamenti o lo spostamento in JavaScript.
DocumentBrowserFileCachePath Stringa Se si utilizza UIDocumentBrowserViewController, impostare un percorso (relativo alla directory principale dell'app) per i file gestiti decrittografati. Facoltativo. Il valore predefinito è /Documents/.
VerboseLoggingEnabled Booleano Abilita la registrazione dettagliata. Facoltativo. Il valore predefinito è NO.
FinishLaunchingAtStartup Booleano Obbligatorio quando si utilizza [BGTaskScheduler registerForTaskWithIdentifier:]; deve essere YES. Facoltativo. Il valore predefinito è NO.
ValuesToScrubFromLogging Matrice di stringhe Valori di Configurazione dell'applicazione che devono essere rimossi dai log. Può essere impostato anche tramite valuesToScrubFromLogging on IntuneMAMSettings. Facoltativo.

Ricevere i criteri di protezione delle app

Panoramica

Per ricevere i criteri di protezione delle app di Intune, le app devono avviare una richiesta di registrazione con il servizio MAM di Intune. Le app possono essere configurate nell'interfaccia di amministrazione di Intune per ricevere i criteri di protezione delle app con o senza registrazione dei dispositivi. Mobile Application Management (MAM) consente la gestione delle app da parte di Intune senza la necessità di registrare il dispositivo in Intune Mobile Device Management (MDM). In entrambi i casi, è necessaria la registrazione al servizio MAM di Intune per ricevere i criteri.

Importante

La Intune App SDK per iOS usa chiavi di crittografia a 256 bit quando la crittografia è abilitata dai criteri di protezione delle app. Tutte le app devono avere una versione SDK corrente per consentire la condivisione dei dati protetta.

App che usano già ADAL o MSAL

Nota

L'Autenticazione di Azure AD Library (ADAL) e l'API Graph di Azure AD sono deprecate. Per altre informazioni, vedere Aggiornare le applicazioni per l'uso di Libreria di Autenticazione Microsoft (MSAL) e Microsoft API Graph.

Le app che usano già MSAL devono chiamare il registerAndEnrollAccountId metodo nell'istanza dopo che IntuneMAMEnrollmentManager l'utente è stato autenticato correttamente:

/*
 *  This method adds the account to the list of registered accounts.
 *  An enrollment request starts immediately.
 *  @param accountId The Entra object ID of the account to be registered with the SDK
 */

(void)registerAndEnrollAccountId:(NSString *_Nonnull)accountId;

Se l'accesso viene eseguito correttamente, MSAL restituisce il risultato nell'oggetto MSALResult. Usare tenantProfile.identifier all'interno di MSALResult come parametro accountId per l'API.

Chiamando il registerAndEnrollAccountId metodo, l'SDK registra l'account utente e tenta di registrare l'app per conto di questo account. Se la registrazione non riesce per qualsiasi motivo, l'SDK ritenta automaticamente la registrazione 24 ore dopo. A scopo di debug, l'app può ricevere notifiche, tramite un delegato, sui risultati di eventuali richieste di registrazione.

Dopo aver richiamato questa API, l'app può continuare a funzionare normalmente. Se la registrazione ha esito positivo, l'SDK notifica all'utente che è necessario riavviare l'app. A quel punto, l'utente può riavviare immediatamente l'app.

[[IntuneMAMEnrollmentManager instance] registerAndEnrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822"];

App che non usano ADAL o MSAL

Le app che non accedono all'utente con ADAL o MSAL possono comunque ricevere criteri di protezione delle app dal servizio MAM di Intune chiamando l'API per fare in modo che l'SDK gestisca l'autenticazione. Le app devono usare questa tecnica quando non hanno autenticato un utente con Microsoft Entra ID, ma devono comunque recuperare i criteri di protezione delle app per proteggere i dati. Un esempio è se un altro servizio di autenticazione viene usato per l'accesso all'app o se l'app non supporta affatto l'accesso. A tale scopo, l'applicazione può chiamare il loginAndEnrollAccount metodo sull'istanza IntuneMAMEnrollmentManager :

/**
 *  Creates an enrollment request, which starts immediately.
 *  If no token can be retrieved for the identity, the user is prompted
 *  to enter their credentials, after which enrollment is retried.
 *  @param identity The UPN of the account to be logged in and enrolled.
 */
 (void)loginAndEnrollAccount: (NSString *)identity;

Chiamando questo metodo, l'SDK chiede all'utente di fornire le credenziali se non è possibile trovare alcun token esistente. L'SDK tenta quindi di registrare l'app con il servizio MAM Intune per conto dell'account utente fornito. Il metodo può essere chiamato con "nil" come identità. In tal caso, l'SDK viene registrato con l'utente gestito esistente nel dispositivo (se MDM) o chiede all'utente di immettere un nome utente se non viene trovato un utente esistente.

Se la registrazione non riesce, l'app deve prendere in considerazione la possibilità di chiamare di nuovo questa API in un momento successivo, a seconda dei dettagli dell'errore. L'app può ricevere notifiche, tramite un delegato, sui risultati di eventuali richieste di registrazione.

Dopo aver richiamato questa API, l'app può continuare a funzionare normalmente. Se la registrazione ha esito positivo, l'SDK notifica all'utente che è necessario riavviare l'app. Una volta gestita l'app, è necessario eseguire una query sul valore dell'ID oggetto Microsoft Entra utilizzando enrolledAccountId nella finestra di IntuneMAMEnrollmentManagerdialogo . Usarla per tutte le API MAM SDK usate dall'app per questo account registrato.

Esempio:

[[IntuneMAMEnrollmentManager instance] loginAndEnrollAccount:@"user@foo.com"];

Consentire a Intune di gestire l'autenticazione e la registrazione al momento dell'avvio

Se si vuole che Intune SDK gestisca tutta l'autenticazione con ADAL/MSAL e la registrazione prima del completamento dell'avvio dell'app e l'app richiede sempre criteri di protezione delle app, non è necessario usare loginAndEnrollAccount l'API. È possibile impostare le impostazioni seguenti su SÌ nel dizionario IntuneMAMSettings in Info.plist dell'app.

Impostazione Tipo Definizione
AutoEnrollOnLaunch Booleano Specifica se l'app deve tentare di eseguire automaticamente la registrazione all'avvio se viene rilevata un'identità gestita esistente e non è ancora stata eseguita. Il valore predefinito è NO.

Nota: Se non viene trovata alcuna identità gestita o non è disponibile alcun token valido per l'identità nella cache ADAL/MSAL, il tentativo di registrazione ha esito negativo senza richiedere le credenziali, a meno che l'app non sia impostata MAMPolicyRequired anche su .
MAMPolicyRequired Booleano Specifica se l'avvio dell'app è bloccato se l'app non ha un criterio di protezione dell'app Intune. Il valore predefinito è NO.

Nota: Le app non possono essere inviate all'App Store con MAMPolicyRequired l'impostazione su . Quando si imposta MAMPolicyRequired su YES,AutoEnrollOnLaunch deve essere impostato anche su YES.

Se si sceglie questa opzione per l'app, non è necessario gestire il riavvio dell'app dopo la registrazione.

Annullare la registrazione degli account utente

Prima che un utente venga disconnesso da un'app, l'app deve annullare la registrazione dell'utente dall'SDK. Questo processo garantisce:

  1. I tentativi di registrazione non vengono più eseguiti per l'account dell'utente.

  2. I criteri di protezione di app vengono rimossi.

  3. I dati aziendali vengono eliminati se l'app avvia una cancellazione selettiva (facoltativa).

Prima che l'utente venga disconnesso, l'app deve chiamare il metodo seguente sull'istanza IntuneMAMEnrollmentManager :

/*
 *  This method removes the provided account from the list of
 *  registered accounts. Once removed, if the account enrolled
 *  the application, the account is un-enrolled.
 *  @note In the case where an un-enroll is required, this method blocks
 *  until the Intune APP AAD token is acquired, then returns. This method must be called before
 *  the user is removed from the application (so that required AAD tokens are not purged
 *  before this method is called).
 *  @param accountId The object ID of the account to be removed.
 *  @param doWipe  If YES, a selective wipe if the account is un-enrolled
 */
(void)deRegisterAndUnenrollAccountId:(NSString *)accountId withWipe:(BOOL)doWipe;

Questo metodo deve essere chiamato prima che i token Microsoft Entra dell'account utente vengano eliminati. L'SDK necessita dei token Microsoft Entra dell'account utente per effettuare richieste specifiche al servizio MAM di Intune per conto dell'utente.

Se l'app elimina autonomamente i dati aziendali dell'utente, il doWipe flag può essere impostato su false. In caso contrario, l'app può avviare una cancellazione selettiva con l'SDK. Questa azione determina una chiamata al delegato della cancellazione selettiva dell'app.

Esempio:

[[IntuneMAMEnrollmentManager instance] deRegisterAndUnenrollAccountId:@"3ec2c00f-b125-4519-acf0-302ac3761822" withWipe:YES];

Notifiche di stato, risultato e debug

L'app può ricevere notifiche di stato, risultato e debug sulle seguenti richieste al servizio Intune MAM:

  • Richieste di registrazione
  • Richieste di aggiornamento dei criteri
  • Richieste di annullamento della registrazione

Le notifiche vengono presentate tramite metodi delegati in IntuneMAMEnrollmentDelegate.h:

/**
 *  Called when an enrollment request operation is completed.
 * @param status status object containing debug information
 */

(void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

/**
 *  Called when a MAM policy request operation is completed.
 *  @param status status object containing debug information
 */
(void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

/**
 *  Called when a un-enroll request operation is completed.
 *  @Note: when a user is un-enrolled, the user is also de-registered with the SDK
 *  @param status status object containing debug information
 */

(void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus *)status;

Questi metodi delegati restituiscono un IntuneMAMEnrollmentStatus oggetto che contiene le informazioni seguenti:

  • accountId (ID oggetto) dell'account associato alla richiesta
  • Identità (UPN) dell'account associato alla richiesta
  • Codice di stato che indica il risultato della richiesta
  • Stringa di errore con una descrizione del codice di stato
  • Un NSError oggetto. Questo oggetto è definito in IntuneMAMEnrollmentStatus.h, insieme ai codici di stato specifici che possono essere restituiti.

Codice di esempio

Di seguito sono riportate implementazioni di esempio dei metodi delegati:

- (void)enrollmentRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
    NSLog(@"enrollment result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}

- (void)policyRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
    NSLog(@"policy check-in result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}

- (void)unenrollRequestWithStatus:(IntuneMAMEnrollmentStatus*)status
{
    NSLog(@"un-enroll result for identity %@ with status code %ld", status.accountId, (unsigned long)status.statusCode);
    NSLog(@"Debug Message: %@", status.errorString);
}

Riavvio dell'applicazione

Quando un'app riceve i criteri di gestione di app per la prima volta, deve essere riavviata per applicare gli hook necessari. Per notificare all'app che è necessario eseguire un riavvio, l'SDK fornisce un metodo delegato in IntuneMAMPolicyDelegate.h.

 - (BOOL) restartApplication

Il valore restituito di questo metodo indica all'SDK se l'applicazione deve gestire il riavvio richiesto:

  • Se viene restituito true, l'applicazione deve gestire il riavvio.

  • Se viene restituito false, l'SDK riavvia l'applicazione dopo la restituzione di questo metodo. L'SDK visualizza immediatamente una finestra di dialogo che indica all'utente di riavviare l'applicazione.

Nota

Le app .NET MAUI non richiedono un riavvio.

Criteri di chiusura

Dopo aver configurato il plug-in di compilazione o integrato lo strumento da riga di comando nel processo di compilazione, verificare che l'esecuzione sia corretta:

  • Assicurarsi che la compilazione venga compilata correttamente.
  • Avviare l'app compilata, accedere con un utente di Microsoft Entra non interessato ai criteri di protezione delle app e verificare che l'app funzioni come previsto.
  • Disconnettersi e ripetere questo test con un utente di Microsoft Entra interessato ai criteri di protezione delle app e verificare che l'app sia ora gestita da Intune e riavviata.

A questo punto dell'integrazione, l'app può ora ricevere e applicare i criteri di protezione delle app. Eseguire i test seguenti per convalidare l'integrazione.

Test dell'applicazione primo criterio

Eseguire prima di tutto il test seguente per acquisire familiarità con l'esperienza utente finale completa dell'applicazione dei criteri all'interno dell'app:

  1. Creare criteri di protezione delle app iOS nell'interfaccia di amministrazione di Microsoft Intune. Per questo test, configurare i criteri:
    • In Requisiti di accesso lasciare le impostazioni predefinite. In particolare, "PIN per l'accesso" deve essere "Richiedi".
  2. Assicurarsi che i criteri di protezione delle app siano destinati all'applicazione. Potrebbe essere necessario aggiungere manualmente l'ID bundle dell'applicazione nella procedura guidata di creazione dei criteri.
  3. Assegnare i criteri di protezione delle app a un gruppo di utenti contenente l'account di test.
  4. Installare l'applicazione.
  5. Accedere all'applicazione con l'account di test destinato ai criteri di protezione delle app.
  6. Verificare che venga visualizzata una schermata gestita da Intune e confermare la richiesta per riavviare l'app. Questa schermata indica che l'SDK ha recuperato correttamente i criteri per questo account.
  7. Crea un PIN quando ti viene chiesto di impostare un PIN dell'app.
  8. Disconnettere l'account gestito dall'applicazione.
  9. Spostarsi nell'applicazione e verificare che l'app funzioni come previsto, se possibile senza eseguire l'accesso.

Questo elenco di passaggi è un test *minimo indispensabile per verificare che l'app registri correttamente l'account, registri il callback di autenticazione e annulli la registrazione dell'account. Eseguire i test seguenti per convalidare in modo più approfondito il modo in cui altre impostazioni dei criteri di protezione delle app modificano il comportamento dell'applicazione.

Operazioni successive

Dopo aver completato tutti i criteri di uscita, continua con la fase 4: funzionalità di partecipazione all'app.