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 pro .NET (MSAL.NET), která podporuje zprostředkovatele v iOSu od verze 4.3 dále.

Kde byste měli začít? Tento článek vám pomůže migrovat aplikaci Xamarin iOS z knihovny ADAL do KNIHOVNY 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 ne, přesuňte se přímo do MSAL.NET a zahajte 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 v Androidu a iOSu. (Viz Aplikace Microsoft Authenticator v iOSu a Androidu a Portál společnosti Intune v Androidu.)

Povolí:

  • Jednotné přihlašování.
  • Identifikace zařízení, kterou vyžadují některé zásady podmíněného přístupu. Další informace najdete v tématu Správa zařízení.
  • Ověření identifikace aplikace, které se vyžaduje také v některých podnikových scénářích. Další informace najdete v tématu Správa mobilních aplikací (MAM) Intune.

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 vypnuto. Museli jste si nastavit

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

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

Také v kódu specifickém pro platformu v tomto příkladu nastavte v rendereru stránky pro iOS useBroker příznak na hodnotu true:

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

Pak do volání tokenu získání zahrňte parametry:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
V MSAL.NET je podpora zprostředkovatele povolená pro jednotlivé verze PublicClientApplication. Ve výchozím nastavení je vypnuto. Pokud ho chcete povolit, použijte

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

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

Při volání tokenu získání:

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

Krok 2: Nastavení UIViewController()

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

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

PlatformParameters na platformě specifické pro iOS.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
V MSAL.NET uděláte dvě věci, které nastaví okno objektu pro iOS:
  1. V AppDelegate.cs, nastavena 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. Při 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í tokenu získání:

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 neexistují žádné změny.

Krok 4: Registrace schématu adres URL

ADAL.NET a MSAL.NET použít adresy URL k vyvolání zprostředkovatele a vrácení odpovědi zprostředkovatele zpět do aplikace. Následujícím způsobem zaregistrujte schéma adres URL v Info.plist souboru pro vaši aplikaci:

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

CFBundleURLSchemes název musí obsahovat

msauth.

jako předponu následovanou vaším 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 adres URL se stane součástí identifikátoru URI přesměrování, který slouží 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 a MSAL.NET oba používají -canOpenURL: ke kontrole, jestli je na zařízení nainstalovaný zprostředkovatel. Do části LSApplicationQueriesSchemes souboru info.plist přidejte správný identifikátor zprostředkovatele iOS následujícím způsobem:

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

msauth

<key>LSApplicationQueriesSchemes</key>
<array>
     <string>msauth</string>
</array>
Používá

msauthv2

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

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

ADAL.NET i MSAL.NET oba při cílení na zprostředkovatele přidají další požadavek na identifikátor URI přesměrování. Zaregistrujte identifikátor URI přesměrování ve vaší aplikaci na webu 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í na webu Azure Portal najdete v kroku 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 klíčence naleznete v tématu Povolení přístupu ke klíčence.

Další kroky

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