.NET クライアント ライブラリの使用を Microsoft Graph に移行する

この記事は 、「手順 3: アプリ移行するプロセスのアプリの詳細を確認する」の一部です。

アプリで現在 Azure Active Directory (Azure AD) Graph クライアント ライブラリを使用している場合は、 Microsoft Graph .NET クライアント ライブラリに切り替えます。

この記事では、Microsoft Graph .NET クライアント ライブラリに移行するための次の一般的な手順について説明します。

  • アクセス トークンを指定して Microsoft Graph クライアントを作成する方法 (Azure Active Directory 認証ライブラリ (ADAL) または Microsoft Authentication Library (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. パッケージ マネージャーを使用して、 Microsoft Graph NuGet パッケージ をダウンロードして更新し、依存関係を更新します。

  4. ではなく、 を作成するようにクライアント コンストラクターをGraphServiceClientActiveDirectoryClient更新します。 次のコード スニペットは、アプリが メソッドを 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);
       }));
    

    Microsoft Graph クライアント ライブラリの serviceRoot 場合、値にはバージョン番号も含まれます。 現在、その値は です https://graph.microsoft.com/v1.0

  5. 次のように変更して、Microsoft Graph クライアント要求ビルダー構文を使用するように要求を更新します。

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

    宛先:

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

    注:

    Azure AD Graph クライアント ライブラリでは、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 とエラー条件は表示されず、コード スニペットはシングル スレッドコンソール アプリ用です。

    たとえば、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);
    
    

    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 クライアント ライブラリでは、追加の プラットフォームと言語がサポートされています

次の手順