Migrace aplikací pro iOS, které používají Microsoft Authenticator, z ADAL.NET do MSAL.NET

Používali jste knihovnu Azure Active Directory Authentication Library pro .NET (ADAL.NET) a zprostředkovatele iOS. Teď je čas migrovat do knihovny Microsoft Authentication Library for .NET (MSAL.NET), která podporuje zprostředkovatele v iOSu od verze 4.3.

Kde začít? Tento článek vám pomůže s migrací aplikace Xamarin pro iOS z ADAL do MSAL.

Požadavky

Tento článek předpokládá, že už máte aplikaci Xamarin pro iOS, která je integrovaná se zprostředkovatelem iOS. Pokud to neuděláte, přejděte přímo na MSAL.NET a spusťte implementaci zprostředkovatele tam. Informace o tom, jak vyvolat zprostředkovatele pro iOS v MSAL.NET s novou aplikací, najdete v této dokumentaci.

Pozadí

Co jsou zprostředkovatelé?

Zprostředkovatelé jsou aplikace poskytované Microsoftem pro Android a iOS. (Podívejte se na aplikaci Microsoft Authenticator pro iOS a Android a aplikaci Portál společnosti Intune na Androidu.)

Umožňují:

Migrace z ADAL na MSAL

Krok 1: Povolení zprostředkovatele

Aktuální kód ADAL:Protějšek MSAL:
V ADAL.NET byla podpora zprostředkovatele povolena na základě kontextu ověřování. Ve výchozím nastavení je zakázaná. Museli jste nastavit

useBroker příznak na hodnotu true v konstruktoru PlatformParameters pro volání zprostředkovatele:

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

V kódu specifickém pro platformu v tomto příkladu ve vykreslovacím modulu stránky pro iOS nastavteuseBroker příznak na hodnotu true:

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

Pak do volání získaného tokenu zahrňte parametry:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
V MSAL.NET je podpora zprostředkovatele povolená na základě publicclientapplication. Ve výchozím nastavení je zakázaná. Pokud ho chcete povolit, použijte

WithBroker() parametr (ve výchozím nastavení nastavený na hodnotu true) pro volání zprostředkovatele:

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

Při volání získaného tokenu:

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

Krok 2: Nastavení UIViewController()

V ADAL.NET jste předali uiViewController jako součást .PlatformParameters (Příklad najdete v kroku 1.) V MSAL.NET se kvůli větší flexibilitě vývojářům používá okno objektu, které se ale při běžném používání iOSu nevyžaduje. Pokud chcete použít zprostředkovatele, nastavte okno objektu tak, aby se od zprostředkovatele odesílaly a přijímaly odpovědi.

Aktuální kód ADAL:Protějšek MSAL:
UiViewController je předán do

PlatformParameters na platformě specifické pro iOS.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
V MSAL.NET nastavíte okno objektu pro iOS dvěma způsoby:
  1. V AppDelegate.cssouboru nastavte App.RootViewController na nový UIViewController(). Toto přiřazení zajišťuje, že existuje UIViewController s voláním zprostředkovatele. Pokud není správně nastavená, může se zobrazit tato chyba: "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. Ve volání AcquireTokenInteractive použijte .WithParentActivityOrWindow(App.RootViewController)a předejte odkaz na okno objektu, které použijete.

Příklad:

V App.cs:

   public static object RootViewController { get; set; }

V AppDelegate.cs:

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

Při volání získaného tokenu:

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

Krok 3: Aktualizace AppDelegate pro zpracování zpětného volání

ADAL i MSAL volají zprostředkovatele a zprostředkovatel zase volá zpět do vaší aplikace prostřednictvím OpenUrl metody AppDelegate třídy. Další informace najdete v této dokumentaci.

Mezi ADAL.NET a MSAL.NET nejsou žádné změny.

Krok 4: Registrace schématu adres URL

ADAL.NET a MSAL.NET pomocí adres URL vyvolat zprostředkovatele a vrátit odpověď zprostředkovatele zpět do aplikace. Zaregistrujte schéma adres URL v Info.plist souboru pro vaši aplikaci následujícím způsobem:

Aktuální kód ADAL:Protějšek MSAL:
Schéma adres URL je pro vaši aplikaci jedinečné. Prostředek

CFBundleURLSchemes název musí obsahovat

msauth.

jako předponu, za kterou následuje vaše CFBundleURLName

Příklad: $"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>

Poznámka

Toto schéma adresy URL se stane součástí identifikátoru URI přesměrování, který se používá k jedinečné identifikaci aplikace, když obdrží odpověď od zprostředkovatele.

Krok 5: Přidání identifikátoru zprostředkovatele do části LSApplicationQueriesSchemes

ADAL.NET i MSAL.NET používají -canOpenURL: ke kontrole, jestli je na zařízení nainstalovaný zprostředkovatel. Přidejte správný identifikátor zprostředkovatele iOS do části LSApplicationQueriesSchemes souboru info.plist následujícím způsobem:

Aktuální kód ADAL:Protějšek MSAL:
Použití

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
Použití

msauthv2

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

Krok 6: Registrace identifikátoru URI přesměrování v Azure Portal

ADAL.NET i MSAL.NET přidávají další požadavek na identifikátor URI přesměrování, když cílí na zprostředkovatele. Zaregistrujte identifikátor URI přesměrování v aplikaci v Azure Portal.

Aktuální kód ADAL:Protějšek MSAL:

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

Příklad:

mytestiosapp://com.mycompany.myapp

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

Příklad:

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

Další informace o registraci identifikátoru URI přesměrování v Azure Portal najdete v tématu Krok 7: Přidání identifikátoru URI přesměrování do registrace aplikace.

Krok 7: Nastavení souboru Entitlements.plist

Povolte přístup ke svazku klíčů v souboru Entitlements.plist :

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

Další informace o povolení přístupu ke svazku klíčů najdete v tématu Povolení přístupu ke svazku klíčů.

Další kroky

Přečtěte si o aspektech specifických pro Xamarin iOS v MSAL.NET.