Migrer des applications iOS d’ADAL.NET vers MSAL.NET en utilisant Microsoft Authenticator

Vous utilisez la bibliothèque d’authentification Azure Active Directory pour .NET (ADAL.NET) et le répartiteur iOS. Il est maintenant temps de migrer vers la bibliothèque d'authentification Microsoft pour .NET (MSAL.NET) qui prend en charge le répartiteur sur iOS depuis la version 4.3.

Par où démarrer ? Cet article vous aide à migrer votre application Xamarin iOS d'ADAL vers MSAL.

Prérequis

Cet article part du principe que vous disposez déjà d’une application Xamarin iOS intégrée avec le répartiteur iOS. Si ce n’est pas le cas, passez directement à MSAL.NET pour commencer à implémenter le répartiteur. Pour des informations sur l’appel du répartiteur iOS dans MSAL.NET avec une nouvelle application, consultez cette documentation.

Arrière-plan

Que sont les répartiteurs ?

Les répartiteurs sont des applications fournies par Microsoft sur Android et iOS. (Voir l'application Microsoft Authenticator sur iOS et Android, ainsi que l’application Portail d'entreprise Intune sur Android.)

Ils permettent d’effectuer les opérations suivantes :

Migrer d’ADAL vers MSAL

Étape 1 : Activer le répartiteur

Code ADAL actuel :Contrepartie MSAL :
Dans ADAL.NET, la prise en charge du répartiteur était activée pour chaque contexte d’authentification. Elle est désactivée par défaut. Vous deviez définir un

indicateur useBroker sur la valeur true dans le constructeur PlatformParameters pour appeler le répartiteur :

public PlatformParameters(
        UIViewController callerViewController,
        bool useBroker)

Par ailleurs, dans le code spécifique de la plateforme de cet exemple, dans le convertisseur de page pour iOS, vous devez définir l’indicateur Indicateur useBroker sur true :

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

Ensuite, incluez les paramètres dans l’appel d’acquisition de jeton :

 AuthenticationResult result =
                    await
                        AuthContext.AcquireTokenAsync(
                              Resource,
                              ClientId,
                              new Uri(RedirectURI),
                              platformParameters)
                              .ConfigureAwait(false);
Dans MSAL.NET, la prise en charge du répartiteur est activée pour chaque application cliente publique (PublicClientApplication). Elle est désactivée par défaut. Pour l’activer, utilisez le

le paramètre WithBroker() (défini sur true par défaut) pour appeler répartiteur :

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

Dans l’appel d’acquisition de jeton :

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

Étape 2 : Définir un UIViewController()

Dans ADAL.NET, vous avez transmis un UIViewController dans le cadre de PlatformParameters. (Voir l'exemple de l'étape 1.) Dans MSAL.NET, pour offrir plus de flexibilité aux développeurs, une fenêtre d’objet est utilisée, mais n’est pas obligatoire dans l’utilisation normale d’iOS. Pour pouvoir utiliser le répartiteur, définissez la fenêtre d’objet pour qu’elle envoie et reçoive des réponses du répartiteur.

Code ADAL actuel :Contrepartie MSAL :
Un UIViewController est transmis dans

PlatformParameters dans la plateforme spécifique à iOS.

page.BrokerParameters = new PlatformParameters(
          this,
          true,
          PromptBehavior.SelectAccount);
Dans MSAL.NET, vous devez effectuer deux opérations pour définir la fenêtre d’objet pour iOS :
  1. Dans AppDelegate.cs, définissez App.RootViewController sur un nouveau UIViewController(). Cette affectation vérifie l’existence d’un UIViewController avec l’appel au répartiteur. S’il n’est pas défini correctement, vous pouvez recevoir cette erreur : "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. Dans l’appel AcquireTokenInteractive, utilisez .WithParentActivityOrWindow(App.RootViewController) et transmettez la référence à la fenêtre d’objet que vous allez utiliser.

Par exemple :

Dans App.cs :

   public static object RootViewController { get; set; }

Dans AppDelegate.cs :

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

Dans l’appel d’acquisition de jeton :

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

Étape 3 : Mettre à jour AppDelegate pour gérer le rappel

ADAL et MSAL appellent le répartiteur, puis celui-ci rappelle votre application par le biais de la méthode OpenUrl de la classe AppDelegate. Pour plus d’informations, consultez cette documentation.

Il n'existe ici aucune différence entre ADAL.NET et MSAL.NET.

Étape 4 : Inscrire un schéma d’URL

ADAL.NET et MSAL.NET utilisent des URL pour appeler le répartiteur, avant de retourner la réponse du répartiteur à l’application. Inscrivez le modèle d’URL dans le fichier Info.plist de votre application comme suit :

Code ADAL actuel :Contrepartie MSAL :
Le modèle d’URL est propre à votre application. .

CFBundleURLSchemes doit inclure

msauth.

en tant que préfixe, suivi de votre CFBundleURLName.

Par exemple : $"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>

Notes

Ce schéma d’URL fait partie intégrante de l’URI de redirection utilisé pour identifier de manière unique l’application lorsqu’elle reçoit la réponse du répartiteur.

Étape 5 : Ajouter l’identificateur du répartiteur à la section LSApplicationQueriesSchemes

ADAL.NET et MSAL.NET utilisent -canOpenURL: pour vérifier si le répartiteur est installé sur l’appareil. Ajoutez l’identificateur correct pour le répartiteur iOS à la section LSApplicationQueriesSchemes du fichier info.plist comme suit :

Code ADAL actuel :Contrepartie MSAL :
Utilisations

msauth

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

msauthv2

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

Étape 6 : Inscrire votre URI de redirection dans le portail Azure

ADAL.NET et MSAL.NET ajoutent tous deux une exigence supplémentaire à l'URI de redirection lorsqu'il cible le répartiteur. Enregistrez l’URI de redirection avec votre application sur le portail Azure.

Code ADAL actuel :Contrepartie MSAL :

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

Exemple :

mytestiosapp://com.mycompany.myapp

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

Exemple :

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

Pour plus d’informations sur l’inscription de l’URI de redirection dans le Portail Azure, consultez Étape 7 : Ajouter un URI de redirection à l’inscription de votre application.

Étape 7 : Définir les droits Entitlements.plist

Activer l’accès au trousseau dans le fichier deEntitlements.plist :

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

Pour plus d’informations sur l’activation de l’accès au trousseau, consultez Activer l’accès au trousseau.

Étapes suivantes

Découvrez les considérations spécifiques de Xamarin iOS avec MSAL.NET.