Migrera iOS-program som använder Microsoft Authenticator från ADAL.NET till MSAL.NET

Du har använt Azure Active Directory Authentication Library för .NET (ADAL.NET) och iOS-koordinatorn. Nu är det dags att migrera till Microsoft Authentication Library for .NET (MSAL.NET), som stöder asynkron meddelandekö på iOS från version 4.3 och senare.

Var ska du börja? Den här artikeln hjälper dig att migrera din Xamarin iOS-app från ADAL till MSAL.

Förutsättningar

Den här artikeln förutsätter att du redan har en Xamarin iOS-app som är integrerad med iOS-mäklaren. Om du inte gör det går du direkt till MSAL.NET och påbörjar implementeringen av koordinatorn där. Information om hur du anropar iOS-koordinatorn i MSAL.NET med ett nytt program finns i den här dokumentationen.

Bakgrund

Vad är mäklare?

Brokers är program som tillhandahålls av Microsoft på Android och iOS. (Se Microsoft Authenticator-appen på iOS och Android samt Intune-företagsportal-appen på Android.)

De aktiverar:

Migrera från ADAL till MSAL

Steg 1: Aktivera asynkron meddelandekö

Aktuell ADAL-kod:MSAL-motsvarighet:
I ADAL.NET aktiverades asynkron support per autentisering. Som standard är den inaktiverad. Du var tvungen att ställa in en

useBroker flagga till true i PlatformParameters konstruktorn för att anropa asynkron meddelandekö:

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

I den plattformsspecifika koden anger du i det här exemplet i sidåtergivningen för iOS useBroker flagga till true:

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

Inkludera sedan parametrarna i anropet för att hämta token:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
I MSAL.NET aktiveras asynkron support per PublicClientApplication. Som standard är den inaktiverad. Om du vill aktivera den använder du

WithBroker() parameter (inställd på true som standard) för att anropa asynkron meddelandekö:

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

I anropet för att hämta token:

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

Steg 2: Ange ett UIViewController()

I ADAL.NET skickade du in en UIViewController som en del av PlatformParameters. (Se exemplet i steg 1.) I MSAL.NET används ett objektfönster för att ge utvecklare mer flexibilitet, men det krävs inte i vanlig iOS-användning. Om du vill använda asynkron meddelandekö anger du objektfönstret för att skicka och ta emot svar från asynkron meddelandekö.

Aktuell ADAL-kod:MSAL-motsvarighet:
En UIViewController skickas till

PlatformParameters på den iOS-specifika plattformen.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
I MSAL.NET gör du två saker för att ange objektfönstret för iOS:
  1. I AppDelegate.csanger du App.RootViewController till en ny UIViewController(). Den här tilldelningen säkerställer att det finns en UIViewController med anropet till koordinatorn. Om den inte är korrekt inställd kan du få det här felet: "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. I anropet AcquireTokenInteractive använder du .WithParentActivityOrWindow(App.RootViewController)och skickar referensen till det objektfönster som du ska använda.

Till exempel:

I App.cs:

   public static object RootViewController { get; set; }

I AppDelegate.cs:

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

I anropet för att hämta token:

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

Steg 3: Uppdatera AppDelegate för att hantera återanropet

Både ADAL och MSAL anropar mäklaren, och mäklaren anropar i sin tur tillbaka till ditt program via OpenUrl -metoden för AppDelegate klassen. Mer information finns i den här dokumentationen.

Det finns inga ändringar här mellan ADAL.NET och MSAL.NET.

Steg 4: Registrera ett URL-schema

ADAL.NET och MSAL.NET använda URL:er för att anropa asynkron meddelandekö och returnera koordinatorsvaret tillbaka till appen. Registrera URL-schemat i Info.plist filen för din app på följande sätt:

Aktuell ADAL-kod:MSAL-motsvarighet:
URL-schemat är unikt för din app.

CFBundleURLSchemes namn måste innehålla

msauth.

som ett prefix, följt av din CFBundleURLName

Till exempel: $"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>

Kommentar

Det här URL-schemat blir en del av den omdirigerings-URI som används för att unikt identifiera appen när den tar emot svaret från asynkron meddelandekö.

Steg 5: Lägg till koordinatoridentifieraren i avsnittet LSApplicationQueriesSchemes

ADAL.NET och MSAL.NET båda använder -canOpenURL: för att kontrollera om asynkron meddelandekö är installerad på enheten. Lägg till rätt identifierare för iOS-koordinatorn i avsnittet LSApplicationQueriesSchemes i filen info.plist på följande sätt:

Aktuell ADAL-kod:MSAL-motsvarighet:
Använder

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
Använder

msauthv2

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

Steg 6: Registrera din omdirigerings-URI i Azure-portalen

ADAL.NET och MSAL.NET lägger båda till ett extra krav på omdirigerings-URI:n när den riktar sig mot koordinatorn. Registrera omdirigerings-URI:n med ditt program i Azure-portalen.

Aktuell ADAL-kod:MSAL-motsvarighet:

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

Exempel:

mytestiosapp://com.mycompany.myapp

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

Exempel:

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

Mer information om hur du registrerar omdirigerings-URI:n i Azure-portalen finns i Steg 7: Lägg till en omdirigerings-URI i din appregistrering.

Steg 7: Ange entitlements.plist

Aktivera åtkomst till nyckelringar i filen Entitlements.plist :

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

Mer information om hur du aktiverar åtkomst till nyckelringar finns i Aktivera åtkomst till nyckelringar.

Nästa steg

Lär dig mer om Xamarin iOS-specifika överväganden med MSAL.NET.