Migrer l’utilisation de la bibliothèque cliente .NET vers Microsoft Graph

Cet article fait partie de l’étape 3 : passer en revue les détails de l’application du processus de migration des applications.

Si votre application utilise actuellement la bibliothèque de client Azure Active Directory (Azure AD) Graph, basculez vers la bibliothèque de client Microsoft Graph .NET.

Dans cet article, vous allez découvrir les étapes générales suivantes pour migrer vers la bibliothèque de client Microsoft Graph .NET :

  • Comment créer un client Microsoft Graph, avec un jeton d’accès (que vous pouvez acquérir à l’aide de la bibliothèque d’authentification Azure Active Directory (ADAL) ou de la bibliothèque d’authentification Microsoft (MSAL))
  • Guide pratique pour formuler des demandes
  • Utilisation des générateurs de requêtes
  • Comment gérer les collections et la pagination

Vue d’ensemble des étapes de migration

Les étapes suivantes supposent que votre application utilise ADAL pour acquérir des jetons d’accès afin d’appeler Azure AD Graph. Le passage à MSAL peut être effectué en tant qu’étape distincte décrite dans migration vers MSAL.

  1. Pour acquérir un jeton d’accès à Microsoft Graph, mettez à jour resourceUrl de https://graph.windows.net à https://graph.microsoft.com.

  2. Dans votre application, mettez à jour les références à la bibliothèque de client Microsoft Graph en modifiant :

    using Microsoft.Azure.ActiveDirectory.GraphClient;
    

    À:

    using Microsoft.Graph;
    
  3. Utilisez votre gestionnaire de package pour télécharger et mettre à jour le package NuGet Microsoft Graph et mettre à jour les dépendances.

  4. Mettez à jour votre constructeur client pour créer un GraphServiceClient, plutôt que ActiveDirectoryClient. Les extraits de code suivants supposent que votre application utilise la AcquireTokenAsyncForUser() méthode pour acquérir de nouveaux jetons. Vous trouverez une définition pour cette méthode dans le cadre de l’exemple active-directory-dotnet-graphapi-console.

    Changement:

    ActiveDirectoryClient client = new ActiveDirectoryClient(serviceRoot,
    async () => await AcquireTokenAsyncForUser());
    

    À:

    GraphServiceClient graphClient = new GraphServiceClient(serviceRoot,
       new DelegateAuthenticationProvider(async (requestMessage) => {
          var token = await AcquireTokenAsyncForUser();
          requestMessage.Headers.Authorization = new
             AuthenticationHeaderValue("bearer", token);
       }));
    

    Pour la bibliothèque de client Microsoft Graph, la serviceRoot valeur inclut également le numéro de version. Actuellement, cette valeur est https://graph.microsoft.com/v1.0.

  5. Mettez à jour les demandes pour utiliser la syntaxe du générateur de demandes du client Microsoft Graph, en modifiant :

    signedInUser = (User)await client.Me.ExecuteAsync();
    

    À:

    signedInUser = (User)await client.Me.Request().GetAsync();
    

    Remarque

    La bibliothèque de client Azure AD Graph prenait en charge la syntaxe de requête basée sur LINQ. Toutefois, la bibliothèque de client Microsoft Graph ne le fait pas. Par conséquent, vous devez convertir les requêtes pertinentes en une expression plus RESTful.

    Pour ce faire, modifiez :

    var groups = await
    client.Groups.Where(g => g.DisplayName.StartsWith("a")).ExecuteAsync();
    

    À:

    var groups = await
    client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
    
  6. Si votre code parcourt des collections, effectuez les ajustements mineurs suivants. L’exemple suivant compare et compare l’extraction d’un groupe et la pagination de ses membres, 5 à la fois. Bien que le code d’Azure AD Graph nécessite une construction de récupérateur pour extraire les membres d’un groupe, Microsoft Graph n’a pas cette exigence. Pour être concis, seuls les membres utilisateur sont affichés, les conditions try/catch et d’erreur ne sont pas affichées, et les extraits de code concernent une application console monothread.

    Par exemple, modifiez le code suivant à l’aide de la bibliothèque de client Azure AD Graph .NET :

    Group retrievedGroup = client.Groups.
        Where(g => g.ObjectId.Equals(id)).ExecuteAsync().Result;
    IGroupFetcher retrievedGroupFetcher = (IGroupFetcher) retrievedGroup;
    
    var membersPage = retrievedGroupFetcher.Members.Take(5).ExecuteAsync().Result;
    Console.WriteLine(" Members:");
    do
    {
        List<IDirectoryObject> members = membersPage.CurrentPage.ToList();
        foreach (IDirectoryObject member in members)
        {
            if (member is User)
            {
                User memberUser = (User)member;
                Console.WriteLine("        User: {0} ", memberUser.DisplayName);
            }
        }
        membersPage = membersPage.GetNextPageAsync().Result;
    } while (membersPage != null);
    
    

    Vers le code suivant à l’aide de la bibliothèque de client Microsoft Graph .NET :

    var membersPage = client.Groups[id].Members.Request().Top(5).GetAsync().Result;
    Console.WriteLine(" Members:");
    do
    {
        List<DirectoryObject> members = membersPage.CurrentPage.ToList();
        foreach (DirectoryObject member in members)
        {
            if (member is User)
            {
                User memberUser = (User)member;
                Console.WriteLine("        User: {0} ", memberUser.DisplayName);
            }
        }
        if (membersPage.NextPageRequest != null)
            membersPage = membersPage.NextPageRequest.GetAsync().Result;
        else membersPage = null;
    } while (membersPage != null);
    
    
  7. Générez et corrigez les erreurs de ressource, de propriété, de navigation et d’action de service liées aux modifications de nom.

L’application d’extraits de console C# met en évidence davantage les différences entre la bibliothèque de client Microsoft Graph et la bibliothèque de client Azure AD Graph.

La bibliothèque de client Azure AD Graph prend uniquement en charge la plateforme .NET. Toutefois, la bibliothèque de client Microsoft Graph prend en charge des plateformes et des langages supplémentaires.

Étape suivante