次の方法で共有


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

この記事は、Azure AD 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 への移行」で説明されている別の手順として実行できます。

リソース URL を更新する

Microsoft Graph へのアクセス トークンを取得するには、resourceUrl を更新します

差出人:

https://graph.windows.net

宛先:

https://graph.microsoft.com

参照の更新

アプリで、次を変更して、Microsoft Graph クライアント ライブラリへの参照を更新します。

差出人:

using Microsoft.Azure.ActiveDirectory.GraphClient;

宛先:

using Microsoft.Graph;

パッケージと依存関係を更新する

パッケージ マネージャーを使用して、 Microsoft Graph NuGet パッケージ をダウンロードして更新し、依存関係を更新します。

クライアント コンストラクターを更新する

クライアント コンストラクターを更新して、ActiveDirectoryClientではなくGraphServiceClientを作成します。 次のコード スニペットでは、アプリが 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

要求構文の更新

次のように変更して、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();

コレクションとページングを処理する

コレクションを通じてコード ページを作成する場合は、調整が必要です。 次の例では、グループをフェッチし、一度に 5 個のメンバーをページングする比較と対比を行います。 Azure AD Graph のコードでは、グループのメンバーをフェッチするために fetcher コンストラクトが必要ですが、Microsoft Graph にはそのような要件はありません。 コードは trucated で、ユーザー メンバーのみが表示され、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);

テスト、検証、解決

名前の変更に関連するリソース、プロパティ、ナビゲーション、サービス アクションのエラーをビルドして修正します。

リソース

次の手順