Använda omdirigerings-URI:er med Microsoft Authentication Library (MSAL) för iOS och macOS

När en användare autentiserar skickar Microsoft Entra-ID:t token till appen med hjälp av omdirigerings-URI:n som registrerats med Microsoft Entra-programmet.

MSAL kräver att omdirigerings-URI:n registreras med Microsoft Entra-appen i ett specifikt format. MSAL använder en standardomdirigerings-URI om du inte anger någon. Formatet är msauth.[Your_Bundle_Id]://auth.

Standardformatet för omdirigering fungerar för de flesta appar och scenarier, inklusive asynkron autentisering och systemwebbvy. Använd standardformatet när det är möjligt.

Du kan dock behöva ändra omdirigerings-URI:n för avancerade scenarier enligt beskrivningen i följande avsnitt.

Scenarier som kräver en annan omdirigerings-URI

Enkel inloggning mellan appar (SSO)

För Microsofts identitetsplattform att dela token mellan appar måste varje app ha samma klient-ID eller program-ID. Klient-ID:t är den unika identifierare som angavs när du registrerade din app i Azure-portalen (inte programpaketets ID som du registrerar per app med Apple).

Omdirigerings-URI:erna måste vara olika för varje iOS-app. På så sätt kan Microsofts identitetstjänst unikt identifiera olika appar som delar ett program-ID. Varje program kan ha flera omdirigerings-URI:er registrerade i Azure-portalen. Varje app i din svit har en annan omdirigerings-URI. Till exempel:

Med tanke på följande programregistrering i Azure-portalen:

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

App1 använder omdirigering msauth.com.contoso.app1://auth.
App2 använder msauth.com.contoso.app2://auth.
App3 använder msauth.com.contoso.app3://auth.

Migrera från ADAL till MSAL

När du migrerar kod som använde Azure Active Directory Authentication Library (ADAL) till MSAL kanske du redan har konfigurerat en omdirigerings-URI för din app. Du kan fortsätta använda samma omdirigerings-URI så länge din ADAL-app har konfigurerats för att stödja asynkrona scenarier och omdirigerings-URI:n uppfyller kraven för MSAL-omdirigerings-URI-format.

Krav för MSAL-omdirigerings-URI-format

  • MSAL-omdirigerings-URI:n måste vara i formuläret <scheme>://host

    Var <scheme> är en unik sträng som identifierar din app. Den baseras främst på paketidentifieraren för ditt program för att garantera unikhet. Om appens paket-ID till exempel är com.contoso.myappär omdirigerings-URI:n i formuläret: msauth.com.contoso.myapp://auth.

    Om du migrerar från ADAL har din omdirigerings-URI förmodligen det här formatet: <scheme>://[Your_Bundle_Id], där scheme är en unik sträng. Formatet fortsätter att fungera när du använder MSAL.

  • <scheme> måste vara registrerad i appens Info.plist under CFBundleURLTypes > CFBundleURLSchemes. I det här exemplet har Info.plist öppnats som källkod:

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

MSAL kontrollerar om omdirigerings-URI:n registreras korrekt och returnerar ett fel om det inte är det.

  • Om du vill använda universella länkar som en omdirigerings-URI måste den <scheme> vara https och behöver inte deklareras i CFBundleURLSchemes. Konfigurera i stället appen och domänen enligt Apples instruktioner på Universella länkar för utvecklare och anropa handleMSALResponse:sourceApplication: metoden MSALPublicClientApplication för när ditt program öppnas via en universell länk.

Använda en anpassad omdirigerings-URI

Om du vill använda en anpassad omdirigerings-URI skickar du parametern redirectUri till MSALPublicClientApplicationConfig och skickar objektet till MSALPublicClientApplication när du initierar objektet. Om omdirigerings-URI:n är ogiltig returnerar nil initieraren och anger redirectURIErrormed ytterligare information. Till exempel:

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
}

Hantera den URL-öppna händelsen

Ditt program bör anropa MSAL när det får något svar via URL-scheman eller universella länkar. handleMSALResponse:sourceApplication: Anropa metoden MSALPublicClientApplication för när programmet öppnas. Här är ett exempel på anpassade scheman:

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)
}

Nästa steg

Läs mer om autentiseringsflöden och programscenarier