Поделиться через


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

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

Если в настоящее время в приложении используется клиентская библиотека 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.

Обновление URL-адреса ресурса

Чтобы получить маркер доступа к Microsoft Graph, обновите resourceUrl.

От:

https://graph.windows.net

Кому:

https://graph.microsoft.com

Ссылки на обновление

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

От:

using Microsoft.Azure.ActiveDirectory.GraphClient;

Кому:

using Microsoft.Graph;

Обновление пакетов и зависимостей

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

Обновить конструктор клиента

Обновите конструктор клиента, чтобы создать 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.

Обновление синтаксисов запросов

Запросы на обновление для использования синтаксиса построителя запросов клиента 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();

Обработка коллекций и разбиения по страницам

Если кодовые страницы проходят через коллекции, требуются корректировки. В следующем примере сравнивается выборка группы и разбиение по страницам по 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);

Тестирование, проверка, разрешение

Создание и исправление ошибок ресурсов, свойств, навигации и действий службы, связанных с изменением имен.

Ресурсы

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

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