Migrieren von iOS-Anwendungen mit Microsoft Authenticator von ADAL.NET zu MSAL.NET

Bisher haben Sie ADAL.NET (Azure Active Directory Authentication Library for .NET) und den iOS-Broker verwendet. Jetzt es ist an der Zeit, zu MSAL.NET (Microsoft Authentication Library for .NET) zu migrieren, da diese Bibliothek den Broker unter iOS ab Version 4.3 unterstützt.

Wo sollten Sie beginnen? Dieser Artikel unterstützt Sie beim Migrieren Ihrer Xamarin iOS-App von ADAL zu MSAL.

Voraussetzungen

In diesem Artikel wird davon ausgegangen, dass Sie bereits über eine Xamarin iOS-App verfügen, die in den iOS-Broker integriert ist. Wenn dies nicht der Fall ist, wechseln Sie direkt zu MSAL.NET und beginnen dort mit der Brokerimplementierung. Informationen zum Aufrufen des iOS-Brokers in MSAL.NET mit einer neuen Anwendung finden Sie in dieser Dokumentation.

Hintergrund

Was sind Broker?

Broker sind Anwendungen, die von Microsoft unter Android und iOS bereitgestellt werden. (Siehe hierzu die Microsoft Authenticator-App unter iOS und Android und die Unternehmensportal-App von Microsoft Intune unter Android.)

Sie ermöglichen Folgendes:

Migrieren von ADAL zu MSAL

Schritt 1: Aktivieren des Brokers

Aktueller ADAL-Code:MSAL-Entsprechung:
In ADAL.NET wurde die Brokerunterstützung pro Authentifizierung aktiviert. Standardmäßig ist es deaktiviert. Sie mussten

im PlatformParameters-Konstruktor ein useBroker-Flag auf „true“ festlegen, um den Broker aufzurufen:

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

Legen Sie auch im plattformspezifischen Code in diesem Beispiel im Seitenrenderer für iOS das -FlaguseBroker auf „true“ fest:

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);

Fügen Sie dann die Parameter in den Aufruf zum Abrufen eines Tokens (AcquireToken-Aufruf) ein:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
In MSAL.NET wird die Brokerunterstützung wird pro PublicClientApplication aktiviert. Standardmäßig ist es deaktiviert. Um sie zu aktivieren, verwenden Sie den

WithBroker()-Parameter (standardmäßig auf „true“ festgelegt) zum Aufrufen des Brokers:

var app = PublicClientApplicationBuilder
                .Create(ClientId)
                .WithBroker()
                .WithReplyUri(redirectUriOnIos)
                .Build();

Im AcquireToken-Aufruf:

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Schritt 2: Festlegen von „UIViewController()“

In ADAL.NET haben Sie einen UIViewController als Teil von PlatformParameters übermittelt. (Siehe Beispiel in Schritt 1.) Um dem Entwickler mehr Flexibilität zu bieten, wird in MSAL.NET ein Objektfenster verwendet, das aber bei normaler iOS-Verwendung nicht erforderlich ist. Damit Sie den Broker verwenden und den Broker aufrufen und Antworten empfangen können, müssen Sie das Objektfenster festlegen.

Aktueller ADAL-Code:MSAL-Entsprechung:
Ein UIViewController wird an den

PlatformParameters in der iOS-spezifischen Plattform übergeben.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
In MSAL.NET führen Sie zwei Schritte aus, um das Objektfenster für iOS festzulegen:
  1. Legen Sie in AppDelegate.cs den App.RootViewController-Parameter auf einen neuen UIViewController() fest. Durch diese Zuweisung wird sichergestellt, dass ein UIViewController mit dem Aufruf des Brokers vorhanden ist. Wenn der Controller nicht ordnungsgemäß festgelegt wird, erhalten Sie möglicherweise folgende Fehlermeldung: "uiviewcontroller_required_for_ios_broker":"UIViewController is null, so MSAL.NET cannot invoke the iOS broker. See https://aka.ms/msal-net-ios-broker"
  2. Verwenden Sie im AcquireTokenInteractive-Aufruf den .WithParentActivityOrWindow(App.RootViewController)-Parameter, und übergeben Sie den Verweis an das verwendete Objektfenster.

Beispiel:

In App.cs:

   public static object RootViewController { get; set; }

In AppDelegate.cs:

   LoadApplication(new App());
   App.RootViewController = new UIViewController();

Im AcquireToken-Aufruf:

result = await app.AcquireTokenInteractive(scopes)
             .WithParentActivityOrWindow(App.RootViewController)
             .ExecuteAsync();

Schritt 3: Aktualisieren von AppDelegate zum Verarbeiten des Rückrufs

ADAL und MSAL rufen beide den Broker auf, und der Broker wiederum führt über die OpenUrl-Methode der AppDelegate-Klasse einen Rückruf zu Ihrer Anwendung aus. Weitere Informationen finden Sie in dieser Dokumentation.

Hier gibt es keine Änderungen bei MSAL.NET gegenüber ADAL.NET.

Schritt 4: Registrieren eines URL-Schemas

ADAL.NET und MSAL.NET verwenden URLs, um den Broker aufzurufen und die Brokerantwort an die App zurückzugeben. Registrieren Sie in der Datei Info.plist das URL-Schema für Ihre App wie folgt:

Aktueller ADAL-Code:MSAL-Entsprechung:
Das URL-Schema ist für Ihre App eindeutig. Der

CFBundleURLSchemes-Name muss das Präfix

msauth.

gefolgt von Ihrem CFBundleURLName enthalten

Beispiel: $"msauth.(BundleId")

 <key>CFBundleURLTypes</key>
    <array>
      <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.xforms</string>
        <key>CFBundleURLSchemes</key>
        <array>
          <string>msauth.com.yourcompany.xforms</string>
        </array>
      </dict>
    </array>

Hinweis

Dieses URL-Schema wird Teil des Umleitungs-URI, der zur eindeutigen Identifizierung der App verwendet wird, wenn die Antwort vom Broker empfangen wird.

Schritt 5: Hinzufügen der Broker-ID im Abschnitt LSApplicationQueriesSchemes

ADAL.NET und MSAL.NET verwenden -canOpenURL:, um zu überprüfen, ob der Broker auf dem Gerät installiert ist. Fügen Sie in der Datei „Info.plist“ dem Abschnitt „LSApplicationQueriesSchemes“ den richtigen Bezeichner für den iOS-Broker wie folgt hinzu:

Aktueller ADAL-Code:MSAL-Entsprechung:
Verwendung

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
Verwendung

msauthv2

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauthv2</string>
     <string>msauthv3</string>
</array>

Schritt 6: Registrieren des Umleitungs-URI im Azure-Portal

Bei ADAL.NET und MSAL.NET bringt die Verwendung des Brokers als Ziel eine zusätzliche Anforderung an den Umleitungs-URI mit sich. Registrieren Sie den Umleitungs-URI bei Ihrer Anwendung im Azure-Portal.

Aktueller ADAL-Code:MSAL-Entsprechung:

"<app-scheme>://<your.bundle.id>"

Beispiel:

mytestiosapp://com.mycompany.myapp

$"msauth.{BundleId}://auth"

Beispiel:

public static string redirectUriOnIos = "msauth.com.yourcompany.XForms://auth";

Weitere Informationen zum Registrieren des Umleitungs-URI im Azure-Portal finden Sie unter Schritt 7: Hinzufügen eines Umleitungs-URI zur App-Registrierung.

Schritt 7: Festlegen von „Entitlements.plist“

Aktivieren Sie den Keychainzugriff in der Datei Entitlements.plist:

 <key>keychain-access-groups</key>
    <array>
      <string>$(AppIdentifierPrefix)com.microsoft.adalcache</string>
    </array>

Weitere Informationen zum Aktivieren des Keychainzugriffs finden Sie unter Aktivieren des Keychainzugriffs.

Nächste Schritte

Lesen Sie Spezielle Überlegungen für Xamarin iOS mit MSAL.NET.