Uso degli URI di reindirizzamento con il Libreria di Autenticazione Microsoft (MSAL) per iOS e macOS

Quando un utente esegue l'autenticazione, Microsoft Entra ID invia il token all'app usando l'URI di reindirizzamento registrato con l'applicazione Microsoft Entra.

MSAL richiede che l'URI di reindirizzamento sia registrato con l'app Microsoft Entra in un formato specifico. MSAL usa un URI di reindirizzamento predefinito, se non ne viene specificato uno. Il formato è msauth.[Your_Bundle_Id]://auth.

Il formato URI di reindirizzamento predefinito funziona per la maggior parte delle app e degli scenari, tra cui l'autenticazione negoziata e la visualizzazione Web di sistema. Usare il formato predefinito quando possibile.

Tuttavia, potrebbe essere necessario modificare l'URI di reindirizzamento per scenari avanzati, come descritto nella sezione seguente.

Scenari che richiedono un URI di reindirizzamento diverso

Single sign-on tra applicazioni (SSO)

Per consentire al Microsoft Identity Platform di condividere i token tra le app, ogni app deve avere lo stesso ID client o ID applicazione. L'ID client è l'identificatore univoco fornito quando hai registrato l'app nel portale di Azure (non l'ID bundle dell'applicazione registrato per ogni app con Apple).

Gli URI di reindirizzamento devono essere diversi per ogni app iOS. In questo modo il servizio di gestione delle identità Microsoft identifica in modo univoco app diverse che condividono un ID applicazione. Ogni applicazione può avere più URI di reindirizzamento registrati nel portale di Azure. Ogni app della tua suite avrà un URI di reindirizzamento diverso. Per esempio:

Data la registrazione dell'applicazione seguente nel portale di Azure:

  • ID cliente: ABCDE-12345
  • RedirectUris: msauth.com.contoso.app1://auth, msauth.com.contoso.app2://auth, msauth.com.contoso.app3://auth

App1 usa il reindirizzamento msauth.com.contoso.app1://auth.
App2 usa msauth.com.contoso.app2://auth.
App3 usa msauth.com.contoso.app3://auth.

Migrazione da ADAL a MSAL

Quando si esegue la migrazione di codice che usava il Azure Active Directory Authentication Library (ADAL) a MSAL, potrebbe essere già stato configurato un URI di reindirizzamento per l'app. Puoi continuare a usare lo stesso URI di reindirizzamento purché l'app ADAL sia stata configurata per supportare gli scenari negoziati e l'URI di reindirizzamento soddisfi i requisiti di formato dell'URI di reindirizzamento MSAL.

Requisiti relativi al formato dell'URI di reindirizzamento di MSAL

  • L'URI di reindirizzamento MSAL deve essere nel formato <scheme>://host

    Dove <scheme> è una stringa univoca che identifica l'app. Si basa principalmente sull'identificatore bundle dell'applicazione per garantire l'univocità. Ad esempio, se l'ID bundle dell'app è com.contoso.myapp, l'URI di reindirizzamento sarà nel formato : msauth.com.contoso.myapp://auth.

    Se si esegue la migrazione da ADAL, l'URI di reindirizzamento avrà probabilmente questo formato: <scheme>://[Your_Bundle_Id], dove scheme è una stringa univoca. Il formato continuerà a funzionare quando si usa MSAL.

  • <scheme> deve essere registrato nel file Info.plist dell'app sotto CFBundleURLTypes > CFBundleURLSchemes. In questo esempio Info.plist è stato aperto come codice sorgente:

    <key>CFBundleURLTypes</key>
    <array>
        <dict>
            <key>CFBundleURLSchemes</key>
            <array>
                <string>msauth.[BUNDLE_ID]</string>
            </array>
        </dict>
    </array>
    

MSAL verificherà se l'URI di reindirizzamento viene registrato correttamente e restituirà un errore in caso contrario.

  • Se si vogliono usare collegamenti universali come URI di reindirizzamento, deve <scheme> essere https e non deve essere dichiarato in CFBundleURLSchemes. Configurare invece l'app e il dominio in base alle istruzioni di Apple in Collegamenti universali per sviluppatori e chiamare il handleMSALResponse:sourceApplication: metodo di MSALPublicClientApplication quando l'applicazione viene aperta tramite un collegamento universale.

Usare un URI di reindirizzamento personalizzato

Per utilizzare un URI di reindirizzamento personalizzato, passare il parametro redirectUri a MSALPublicClientApplicationConfig e passare tale oggetto a MSALPublicClientApplication quando si inizializza l'oggetto. Se l'URI di reindirizzamento non è valido, l'inizializzatore restituirà nil e impostarà redirectURIErrorcon informazioni aggiuntive. Per esempio:

Objective-C:

MSALPublicClientApplicationConfig *config =
        [[MSALPublicClientApplicationConfig alloc] initWithClientId:@"your-client-id"
                                                        redirectUri:@"your-redirect-uri"
                                                        authority:authority];
NSError *redirectURIError;
MSALPublicClientApplication *application =
        [[MSALPublicClientApplication alloc] initWithConfiguration:config error:&redirectURIError];

Swift:

let config = MSALPublicClientApplicationConfig(clientId: "your-client-id",
                                            redirectUri: "your-redirect-uri",
                                              authority: authority)
do {
  let application = try MSALPublicClientApplication(configuration: config)
  // continue on with application
} catch let error as NSError {
  // handle error here
}

Gestire l'evento di apertura dell'URL

L'applicazione deve chiamare MSAL quando riceve qualsiasi risposta tramite schemi URL o collegamenti universali. Chiama il metodo handleMSALResponse:sourceApplication: di MSALPublicClientApplication quando l'applicazione si apre. Ecco un esempio di schemi personalizzati:

Objective-C:

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    return [MSALPublicClientApplication handleMSALResponse:url
                                         sourceApplication:options[UIApplicationOpenURLOptionsSourceApplicationKey]];
}

Swift:

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    return MSALPublicClientApplication.handleMSALResponse(url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String)
}

Passaggi successivi

Altre informazioni sui flussi di autenticazione e sugli scenari dell'applicazione