Перенос использования клиентской библиотеки .NET в Microsoft Graph

Эта статья является частью шага 3. Просмотр сведений о процессемиграции приложений.

Если в настоящее время в приложении используется клиентская библиотека Graph Azure Active Directory (Azure AD), переключитесь на клиентную библиотеку Microsoft Graph .NET.

В этой статье вы узнаете, как выполнить миграцию в клиентную библиотеку Microsoft Graph .NET:

  • Создание клиента Microsoft Graph с использованием маркера доступа (который можно получить с помощью библиотеки проверки подлинности Azure Active Directory (ADAL) или библиотеки проверки подлинности Майкрософт (MSAL))
  • Как формулировать запросы
  • Использование построителей запросов
  • Обработка коллекций и разбиение по страницам

Общие сведения о шагах миграции

В следующих шагах предполагается, что приложение использует ADAL для получения маркеров доступа для вызова Azure AD Graph. Переключение на MSAL можно выполнить как отдельный шаг, описанный в разделе Миграция на MSAL.

  1. Чтобы получить маркер доступа к Microsoft Graph, обновите resourceUrl с https://graph.windows.net до https://graph.microsoft.com.

  2. В приложении обновите ссылки на клиентную библиотеку Microsoft Graph, изменив:

    using Microsoft.Azure.ActiveDirectory.GraphClient;
    

    Кому:

    using Microsoft.Graph;
    
  3. С помощью диспетчера пакетов скачайте и обновите пакет NuGet Microsoft Graph и обновите зависимости.

  4. Обновите конструктор клиента, чтобы создать GraphServiceClient, а не ActiveDirectoryClient. В следующих фрагментах кода предполагается, что приложение использует AcquireTokenAsyncForUser() метод для получения новых маркеров. Определение для этого метода можно найти в примере active-directory-dotnet-graphapi-console.

    Изменить:

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

    Для клиентской библиотеки serviceRoot Microsoft Graph значение также включает номер версии. В настоящее время это значение равно https://graph.microsoft.com/v1.0.

  5. Запросы на обновление для использования синтаксиса построителя запросов клиента Microsoft Graph путем изменения:

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

    Кому:

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

    Примечание.

    Клиентская библиотека Graph Azure AD поддерживает синтаксис запросов на основе LINQ. Однако клиентская библиотека Microsoft Graph этого не делает. Следовательно, необходимо преобразовать соответствующие запросы в более RESTful-выражение.

    Для этого измените:

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

    Кому:

    var groups = await
    client.Groups.Request().Filter("startswith(displayName,'a')").GetAsync();
    
  6. Если кодовые страницы проходят через коллекции, внесите следующие незначительные изменения. В следующем примере сравнивается выборка группы и разбиение по страницам по 5 за раз. Хотя в коде для Azure AD Graph требуется конструкция fetcher для получения членов группы, в Microsoft Graph такого требования нет. Чтобы быть кратким, отображаются только члены пользователя, не отображаются условия try/catch и error, а фрагменты кода предназначены для однопотокового консольного приложения.

    Например, измените следующий код с помощью клиентской библиотеки .NET Azure AD Graph:

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

    К следующему коду с помощью клиентской библиотеки 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. Создание и исправление ошибок ресурсов, свойств, навигации и действий службы, связанных с изменением имен.

Консольное приложение фрагментов кода C# выделяет больше различий между клиентской библиотекой Microsoft Graph и клиентской библиотекой Azure AD Graph.

Клиентская библиотека Azure AD Graph поддерживает только платформу .NET. Однако клиентская библиотека Microsoft Graph поддерживает дополнительные платформы и языки.

Следующее действие