Migración de aplicaciones de iOS que usan Microsoft Authenticator de ADAL.NET a MSAL.NET

Ha estado usando la biblioteca de autenticación de Azure Active Directory para .NET (ADAL.NET) y el agente de iOS. Ahora es el momento de migrar a la biblioteca de autenticación de Microsoft para .NET (MSAL.net), que es compatible con el agente de iOS de la versión 4.3 en adelante.

¿Por dónde debe empezar? Este artículo le ayuda a migrar la aplicación de Xamarin iOS de ADAL a MSAL.

Prerrequisitos

En este documento se supone que ya tiene una aplicación de Xamarin iOS que se integra con el agente de iOS. Si no es así, pase directamente a MSAL.NET y comience ahí la implementación del agente. Para información sobre cómo invocar el agente de iOS en MSAL.net con una nueva aplicación, consulte esta documentación.

Información previa

¿Qué son los agentes?

Los agentes son aplicaciones proporcionadas por Microsoft en Android e iOS. (Consulte la aplicación Microsoft Authenticator en iOS y Android y la aplicación del Portal de empresa de Intune en Android).

Habilitan lo siguiente:

Migración de ADAL a MSAL

Paso 1: Habilitar el agente

Código de ADAL actual:Homólogo de MSAL:
En ADAL.NET, la compatibilidad con el agente se habilitaba en cada contexto de autenticación. De forma predeterminada, está deshabilitada. Tenía que establecer una marca

useBroker en true en el constructor PlatformParameters para llamar al agente:

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

Además, en el código específico de la plataforma de este ejemplo, en el representador de páginas para iOS, establezca el valor de la marca useBroker marca en true:

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

A continuación, incluya los parámetros en la llamada de adquisición de token:

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
En MSAL.NET, la compatibilidad con el agente se habilita según el elemento PublicClientApplication. De forma predeterminada, está deshabilitada. Para habilitarla, use el

parámetro WithBroker() (establecido en true de manera predeterminada) para llamar al agente:

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

En la llamada al token de adquisición:

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

Paso 2: Establecer un UIViewController()

En ADAL.NET, se pasaba UIViewController como parte de PlatformParameters. (Vea el ejemplo del paso 1). Sin embargo, en MSAL.NET, para ofrecer a los desarrolladores una mayor flexibilidad, se usa una ventana de objeto, pero no hace falta con el uso normal de iOS. Para usar el agente, establezca la ventana de objeto para enviar y recibir respuestas del agente.

Código de ADAL actual:Homólogo de MSAL:
Se pasaba UIViewController a

PlatformParameters en la plataforma específica de iOS.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
En MSAL.NET, deberá hacer dos cosas para establecer la ventana de objeto para iOS:
  1. En AppDelegate.cs, establezca App.RootViewController en un valor de UIViewController() nuevo. Esta asignación garantiza que hay un elemento UIViewController con la llamada al agente. Si no se establece correctamente, puede obtener este error: "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. En la llamada a AcquireTokenInteractive, use .WithParentActivityOrWindow(App.RootViewController) y pase la referencia a la ventana de objeto que usará.

Por ejemplo:

En App.cs:

   public static object RootViewController { get; set; }

En AppDelegate.cs:

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

En la llamada al token de adquisición:

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

Paso 3: Actualizar AppDelegate para controlar la devolución de llamada

Tanto ADAL como MSAL llaman al agente y, el agente, a su vez, devuelve la llamada a la aplicación con el método OpenUrl de la clase AppDelegate. Para obtener más información, consulte esta documentación.

No hay ningún cambio aquí entre ADAL.NET y MSAL.NET.

Paso 4: Registrar un esquema de dirección URL

ADAL.NET y MSAL.NET usan direcciones URL para invocar al agente y devolver la respuesta del agente a la aplicación. Registre el esquema de dirección URL en el archivo Info.plist de la aplicación de la siguiente manera:

Código de ADAL actual:Homólogo de MSAL:
El esquema de dirección URL es exclusivo de la aplicación. El

el nombre de CFBundleURLSchemes debe incluir

msauth.

como prefijo, seguido del CFBundleURLName.

Por ejemplo: $"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>

Nota:

Este esquema de dirección URL se convierte en parte del URI de redirección que se usa para identificar de forma única la aplicación cuando recibe la respuesta del agente.

Paso 5: Agregar el identificador de agente a la sección LSApplicationQueriesSchemes

ADAL.NET y MSAL.NET usan -canOpenURL: para comprobar si el agente está instalado en el dispositivo. Agregue el identificador correcto para el agente de iOS a la sección LSApplicationQueriesSchemes del archivo info.plist de la siguiente manera:

Código de ADAL actual:Homólogo de MSAL:
Usos

msauth

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

msauthv2

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

Paso 6: Registro del identificador URI de redirección en Azure Portal

ADAL.NET y MSAL.NET agregan un requisito adicional al URI de redirección cuando se dirige al agente. Registre el identificador URI de redirección con la aplicación en Azure Portal.

Código de ADAL actual:Homólogo de MSAL:

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

Ejemplo:

mytestiosapp://com.mycompany.myapp

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

Ejemplo:

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

Para más información sobre cómo registrar el identificador URI de redirección en Azure Portal, consulte Paso 7: Adición de un identificador URI de redirección al registro de la aplicación.

Paso 7: Establecimiento del archivo Entitlements.plist

Habilite el acceso a la cadena de claves en el archivo Entitlements.plist:

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

Para más información sobre cómo habilitar el acceso a la cadena de claves, consulte Habilitación del acceso a la cadena de claves.

Pasos siguientes

Obtenga información sobre las Consideraciones específicas de Xamarin iOS con MSAL.NET.