クイックスタート: コンソール アプリの ID を使用してトークンを取得し、Microsoft Graph API を呼び出す

ようこそ。 ご要望のページを表示できません。 問題の修正に取り組んでいますが、次のリンクから目的の記事にアクセスできるかお試しください。

クイックスタート: API を呼び出す .NET Core コンソール

ご不便をおかけして申し訳ありませんが、問題が解決するまで今しばらくお待ちください。

このクイックスタートでは、.NET Core コンソール アプリケーションでアクセス トークンを取得して Microsoft Graph API を呼び出し、ディレクトリ内のユーザーの一覧を表示する方法を示すコード サンプルをダウンロードして実行します。 このコード サンプルでは、ユーザーの ID ではなく、アプリケーション ID を使用してジョブまたは Windows サービスを実行する方法も示します。 このクイックスタートのサンプル コンソール アプリケーションは、デーモン アプリケーションでもあるため、機密クライアント アプリケーションです。

前提条件

このクイックスタートには .NET Core 3.1 SDK が必要ですが、.NET 5.0 SDK でも動作します。

クイックスタート アプリをダウンロードして構成する

手順 1:Azure portal でのアプリケーションの構成

このクイックスタート内のサンプル コードを動作させるには、クライアント シークレットを作成し、Graph API の User.Read.All アプリケーション アクセス許可を追加します。

Already configured アプリケーションはこれらの属性で構成されています。

手順 2:Visual Studio プロジェクトをダウンロードする

Visual Studio 2019 を使用してプロジェクトを実行します。

ヒント

Windows におけるパスの長さの制限に起因したエラーを防ぐため、ドライブのルートに近いディレクトリをアーカイブの展開先またはリポジトリのクローン先とすることをお勧めします。

注意

Enter_the_Supported_Account_Info_Here

この時点でアプリケーションを実行しようとすると、"HTTP 403 - 禁止" エラー "操作を完了するのに十分な特権がありません" が表示されます。このエラーが発生する理由は、すべてのアプリ専用アクセス許可では、ディレクトリの全体管理者がアプリケーションに同意を与える必要があるからです。 ご自身のロールに応じて、次のオプションのいずれかを選択します。

グローバル テナント管理者

全体管理者の場合は、 [API のアクセス許可] ページに移動し、 [Enter_the_Tenant_Name_Here に管理者の同意を与えます] を選択します。

標準ユーザー

テナントの標準ユーザーの場合は、お使いのアプリケーションに管理者の同意を与えるようグローバル管理者に依頼してください。 これを行うには、次の URL を管理者に知らせます。

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

前の URL を使用してアプリに同意を与えた後に、"AADSTS50011: No reply address is registered for the application" (AADSTS50011: アプリケーションの応答アドレスが登録されていません) というエラーが表示される場合があります。 このエラーは、このアプリケーションと URL にリダイレクト URI がないために発生します。 これは無視できます。

手順 4:アプリケーションの実行

Visual Studio または Visual Studio for Mac を使用している場合は、F5 を押してアプリケーションを実行します。 それ以外の場合は、コマンド プロンプト、コンソール、またはターミナルを使用してアプリケーションを実行します。

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

このコードでは:

  • {ProjectFolder} は、.zip ファイルを抽出したフォルダーです。 たとえば C:\Azure-Samples\active-directory-dotnetcore-daemon-v2 です。

結果として、Azure Active Directory 内のユーザーの一覧が表示されます。

このクイックスタート アプリケーションでは、クライアント シークレットを使用して、それ自体を機密クライアントとして識別します。 クライアント シークレットは、プロジェクト ファイルにプレーン テキスト ファイルとして追加されます。 セキュリティ上の理由により、アプリケーションを運用アプリケーションと見なす前に、クライアント シークレットではなく、証明書を使用することをお勧めします。 証明書の使用方法の詳細については、このサンプルの GitHub リポジトリにあるこれらの手順を参照してください。

詳細情報

このセクションでは、ユーザーをサインインさせるために必要なコードの概要を示します。 この概要は、コードの働きや主な引数、また既存の .NET Core コンソール アプリケーションにサインインを追加する方法を理解するのに役立ちます。

このサンプルのしくみ

![このクイックスタートで生成されたサンプル アプリの動作を示す図。](media/quickstart-v2-netcore-daemon/> netcore-daemon-intro.svg)

MSAL.NET

Microsoft Authentication Library (MSAL。Microsoft.Identity.Client パッケージにある) は、ユーザーをサインインさせ、Microsoft ID プラットフォームによって保護された API にアクセスするためのトークンを要求するために使用されるライブラリです。 このクイックスタートでは、委任されたアクセス許可ではなく、アプリケーション自体の ID を使用してトークンを要求しています。 この場合の認証フローは、クライアント資格情報 OAuth フローと呼ばれます。 クライアント資格情報フローで MSAL.NET を使用する方法の詳細については、こちらの記事を参照してください。

MSAL.NET をインストールするには、Visual Studio のパッケージ マネージャー コンソールで次のコマンドを実行します。

dotnet add package Microsoft.Identity.Client

MSAL の初期化

MSAL への参照を追加するには、次のコードを追加します。

using Microsoft.Identity.Client;

その後、次のコードを使用して MSAL を初期化します。

IConfidentialClientApplication app;
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithClientSecret(config.ClientSecret)
                                          .WithAuthority(new Uri(config.Authority))
                                          .Build();
要素 説明
config.ClientSecret Azure portal でアプリケーション用に作成されたクライアント シークレット。
config.ClientId Azure portal に登録されているアプリケーションのアプリケーション (クライアント) ID。 この値は、Azure portal 内のアプリの [概要] ページで確認できます。
config.Authority (省略可能) ユーザーが認証するためのセキュリティ トークン サービス (STS) エンドポイント。 通常、パブリック クラウドの場合は https://login.microsoftonline.com/{tenant} です。{tenant} はテナントの名前またはテナント ID です。

詳しくは、ConfidentialClientApplication のリファレンス ドキュメントをご覧ください。

トークンの要求

アプリの ID を使用してトークンを要求するには、AcquireTokenForClient メソッドを使用します。

result = await app.AcquireTokenForClient(scopes)
                  .ExecuteAsync();
要素 説明
scopes 要求されたスコープが含まれています。 機密クライアントの場合、この値では {Application ID URI}/.default のような形式を使用する必要があります。 この形式は、要求されたスコープが、Azure portal に設定されたアプリ オブジェクトに静的に定義されているものであることを示します。 Microsoft Graph の場合、{Application ID URI}https://graph.microsoft.com を指しています。 カスタム Web API の場合、{Application ID URI} は、Azure portal で [アプリケーションの登録 (プレビュー)]>[API の公開] に定義されます。

詳しくは、AcquireTokenForClient のリファレンス ドキュメントをご覧ください。

ヘルプとサポート

サポートが必要な場合、問題をレポートする場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。

次のステップ

デーモン アプリケーションの詳細については、シナリオの概要を参照してください。