Partager via


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 dans la série de listes de vérification de planification de la migration des applications Azure AD Graph .

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.

Mettre à jour l’URL de la ressource

Pour acquérir un jeton d’accès à Microsoft Graph, mettez à jour resourceUrl

De:

https://graph.windows.net

À:

https://graph.microsoft.com

Mettre à jour les références

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

De:

using Microsoft.Azure.ActiveDirectory.GraphClient;

À:

using Microsoft.Graph;

Mettre à jour les packages et les dépendances

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

Mettre à jour le constructeur client

Mettez à jour votre constructeur client pour créer un GraphServiceClient au lieu de 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.

De:

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.

Mettre à jour les syntaxes de requête

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

De:

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

À:

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

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 :

De:

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

À:

var groups = await
client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();

Gérer les collections et la pagination

Si vos codes parcourent des collections, des ajustements sont nécessaires. 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. Le code est suspendu et affiche uniquement les membres de l’utilisateur, les conditions try/catch et d’erreur ne sont pas affichées, et les extraits de code concernent une application console à thread unique.

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);

Tester, valider, résoudre

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.

Ressources

  • 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