Verwenden von Umleitungs-URIs mit dem Microsoft Authentication Library (MSAL) (MSAL) für iOS und macOS

Wenn ein Benutzer sich authentifiziert, sendet Microsoft Entra ID das Token mithilfe des Umleitungs-URI, der bei der Microsoft Entra-Anwendung registriert ist, an die App.

Das MSAL erfordert, dass der Umleitungs-URI in einem bestimmten Format bei der Microsoft Entra-App registriert wird. MSAL verwendet einen Standardumleitungs-URI, wenn Sie keinen angeben. Das Format ist msauth.[Your_Bundle_Id]://auth.

Das Standardmäßige Umleitungs-URI-Format funktioniert für die meisten Apps und Szenarien, einschließlich brokerischer Authentifizierung und Systemwebansicht. Verwenden Sie nach Möglichkeit das Standardformat.

Möglicherweise müssen Sie jedoch den Umleitungs-URI für erweiterte Szenarien ändern, wie im folgenden Abschnitt beschrieben.

Szenarien, die einen anderen Umleitungs-URI erfordern

App-übergreifende Einmalanmeldung (Single Sign-On, SSO)

Damit die Microsoft Identity Platform Token für alle Apps freigeben können, muss jede App über dieselbe Client-ID oder Anwendungs-ID verfügen. Die Client-ID ist der eindeutige Bezeichner, der angegeben wird, wenn Sie Ihre App im Azure-Portal registriert haben (nicht die Anwendungsbundle-ID, die Sie pro App bei Apple registrieren).

Die Umleitungs-URIs müssen für jede iOS-App unterschiedlich sein. Auf diese Weise kann der Microsoft Identitätsdienst unterschiedliche Apps identifizieren, die eine Anwendungs-ID gemeinsam nutzen. Jede Anwendung kann mehrere Umleitungs-URIs im Azure Portal registriert haben. Jede App in Ihrer Suite verfügt über einen anderen Umleitungs-URI. Beispiel:

Aufgrund der folgenden Anwendungsregistrierung im Azure Portal:

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

App1 verwendet eine Umleitung msauth.com.contoso.app1://auth.
App2 verwendet msauth.com.contoso.app2://auth.
App3 verwendet msauth.com.contoso.app3://auth.

Migrieren von ADAL zu MSAL

Beim Migrieren von Code, der die Azure Active Directory Authentication Library (ADAL) zu MSAL verwendet hat, ist möglicherweise bereits ein Umleitungs-URI für Ihre App konfiguriert. Sie können den gleichen Umleitungs-URI weiterhin verwenden, solange Ihre ADAL-App so konfiguriert wurde, dass vermittelte Szenarien unterstützt werden, und Ihr Umleitungs-URI erfüllt die MSAL-Umleitungs-URI-Formatanforderungen.

Anforderungen an das Format der MSAL-Umleitungs-URI

  • Der MSAL-Umleitungs-URI muss im Formular enthalten sein. <scheme>://host

    Dabei <scheme> handelt es sich um eine eindeutige Zeichenfolge, die Ihre App identifiziert. Es basiert in erster Linie auf dem Bundle-Bezeichner Ihrer Anwendung, um die Eindeutigkeit zu gewährleisten. Wenn die Bundle-ID Ihrer App beispielsweise lautet com.contoso.myapp, lautet der Umleitungs-URI in der Form: msauth.com.contoso.myapp://auth.

    Wenn Sie von ADAL migrieren, hat Ihr Umleitungs-URI wahrscheinlich dieses Format: <scheme>://[Your_Bundle_Id], wobei scheme es sich um eine eindeutige Zeichenfolge handelt. Das Format funktioniert weiterhin, wenn Sie MSAL verwenden.

  • <scheme> muss in der Info.plist Ihrer App unter CFBundleURLTypes > CFBundleURLSchemes eingetragen sein. In diesem Beispiel wurde Info.plist als Quellcode geöffnet:

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

MSAL wird überprüfen, ob Ihre Umleitungs-URI korrekt registriert ist, und einen Fehler zurückgeben, wenn dies nicht der Fall ist.

  • Wenn Sie Universal Links als Redirect-URI verwenden möchten, muss <scheme>https sein und muss nicht in CFBundleURLSchemes deklariert werden. Konfigurieren Sie stattdessen die App und Domäne gemäß den Anweisungen von Apple unter "Universelle Links für Entwickler ", und rufen Sie die handleMSALResponse:sourceApplication: Methode MSALPublicClientApplication auf, wann Ihre Anwendung über einen universellen Link geöffnet wird.

Verwenden eines benutzerdefinierten Umleitungs-URI

Um eine benutzerdefinierte Umleitungs-URI zu verwenden, übergeben Sie den Parameter redirectUri an MSALPublicClientApplicationConfig und übergeben Sie dieses Objekt an MSALPublicClientApplication, wenn Sie das Objekt initialisieren. Wenn der Umleitungs-URI ungültig ist, gibt der Initialisierer nil zurück und setzt redirectURIError mit zusätzlichen Informationen. Beispiel:

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
}

Behandeln des geöffneten URL-Ereignisses

Ihre Anwendung sollte MSAL aufrufen, wenn sie eine Antwort über URL-Schemas oder universelle Links empfängt. Rufen Sie die Methode handleMSALResponse:sourceApplication: von MSALPublicClientApplication auf, wenn Ihre Anwendung geöffnet wird. Hier ist ein Beispiel für benutzerdefinierte Schemas:

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ächste Schritte

Weitere Informationen zu Authentifizierungsflüssen und Anwendungsszenarien