クイック スタート:トークンを取得し、コンソール アプリの ID を使用して Microsoft Graph API を呼び出すQuickstart: Acquire a token and call Microsoft Graph API using console app's identity

このチュートリアルでは、アプリ自体の ID を使用してアクセス トークンを取得した後、Microsoft Graph API を呼び出して、ディレクトリ内のユーザーの一覧を表示する .NET Core アプリケーションを記述する方法について説明します。In this quickstart, you'll learn how to write a .NET Core application that can get an access token using the app's own identity and then call the Microsoft Graph API to display a list of users in the directory. このシナリオは、オペレーターがいない無人のジョブや、ユーザーの ID ではなくアプリケーション ID を使用して実行する必要がある Windows サービスがある状況で役立ちます。This scenario is useful for situations where headless, unattended job or a windows service needs to run with an application identity, instead of a user's identity. (図については、「このサンプルのしくみ」を参照してください)。(See How the sample works for an illustration.)

前提条件Prerequisites

このクイックスタートでは .NET Core 3.1 が必要です。This quickstart requires .NET Core 3.1.

クイック スタート アプリを登録してダウンロードするRegister and download your quickstart app

クイック スタート アプリケーションを開始する方法としては、次の 2 つの選択肢があります。[簡易] (以下のオプション 1) と [手動] (オプション 2)You have two options to start your quickstart application: Express (Option 1 below), and Manual (Option 2)

オプション 1: アプリを登録して自動構成を行った後、コード サンプルをダウンロードするOption 1: Register and auto configure your app and then download your code sample

  1. 新しい Azure portal の [アプリの登録] ウィンドウに移動します。Go to the new Azure portal - App registrations pane.
  2. アプリケーションの名前を入力し、 [登録] を選択します。Enter a name for your application and select Register.
  3. 画面の指示に従ってダウンロードし、1 回クリックするだけで、新しいアプリケーションが自動的に構成されます。Follow the instructions to download and automatically configure your new application with just one click.

オプション 2:アプリケーションを登録し、アプリケーションとコード サンプルを手動で構成するOption 2: Register and manually configure your application and code sample

手順 1:アプリケーションの登録Step 1: Register your application

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。To register your application and add the app's registration information to your solution manually, follow these steps:

  1. 職場または学校アカウントか、個人の Microsoft アカウントを使用して、Azure portal にサインインします。Sign in to the Azure portal using either a work or school account, or a personal Microsoft account.
  2. ご利用のアカウントで複数のテナントにアクセスできる場合は、右上隅でアカウントを選択し、ポータルのセッションを目的の Azure AD テナントに設定します。If your account gives you access to more than one tenant, select your account in the top right corner, and set your portal session to the desired Azure AD tenant.
  3. Azure portal の検索バーから「アプリの登録」を検索して、開発者用の Microsoft ID プラットフォームの [アプリの登録] ページに移動します。Navigate to the Microsoft identity platform for developers App registrations page by searching for App registrations in the Azure Portal search bar.
  4. [新規登録] を選択します。Select New registration.
  5. [アプリケーションの登録] ページが表示されたら、以下のアプリケーションの登録情報を入力します。When the Register an application page appears, enter your application's registration information.
  6. [名前] セクションに、アプリのユーザーに表示されるわかりやすいアプリケーション名 (Daemon-console など) を入力した後、 [登録] を選択してアプリケーションを作成します。In the Name section, enter a meaningful application name that will be displayed to users of the app, for example Daemon-console, then select Register to create the application.
  7. 登録されたら、 [証明書とシークレット] メニューを選択します。Once registered, select the Certificates & secrets menu.
  8. [クライアント シークレット] で、 [+ 新しいクライアント シークレット] を選択します。Under Client secrets, select + New client secret. 名前を付け、 [追加] を選択します。Give it a name and select Add. シークレットを安全な場所にコピーします。Copy the secret on a safe location. 後からコード中で使用する必要があります。ポータルには二度と表示されません。You will need it to use in your code, and it will not be displayed again in the portal.
  9. 次に、 [API のアクセス許可] メニューを選択し、 [+ アクセス許可の追加] ボタンをクリックし、 [Microsoft Graph] を選択します。Now, select the API Permissions menu, select + Add a permission button, select Microsoft Graph.
  10. [アプリケーションのアクセス許可] を選択します。Select Application permissions.
  11. [ユーザー] ノードで、 [User.Read.All] を選択し、 [アクセス許可の追加] を選択します。Under User node, select User.Read.All, then select Add permissions

クイックスタート アプリをダウンロードして構成するDownload and configure your quickstart app

手順 1:Azure portal でのアプリケーションの構成Step 1: Configure your application in Azure portal

このクイック スタート用サンプル コードを動作させるには、クライアント シークレットを作成し、Graph API の User.Read.All アプリケーションのアクセス許可を追加します。For the code sample for this quickstart to work, you need to create a client secret, and add Graph API's User.Read.All application permission.

構成済み アプリケーションはこれらの属性で構成されています。Already configured Your application is configured with these attributes.

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

Visual Studio プロジェクトをダウンロードするDownload the Visual Studio project

提供されているプロジェクトは、Visual Studio または Visual Studio for Mac で実行できます。You can run the provided project in either Visual Studio or Visual Studio for Mac.

Visual Studio 2019 を使用してプロジェクトを実行します。Run the project using Visual Studio 2019.

注意

Enter_the_Supported_Account_Info_Here

手順 3:Visual Studio プロジェクトの構成Step 3: Configure your Visual Studio project

  1. ディスクのルートに近いローカル フォルダー (例: C:\Azure-Samples) に zip ファイルを展開します。Extract the zip file to a local folder close to the root of the disk, for example, C:\Azure-Samples.

  2. Visual Studio でソリューション 1-Call-MSGraph\daemon-console.sln を開きます (省略可能)。Open the solution in Visual Studio - 1-Call-MSGraph\daemon-console.sln (optional).

  3. appsettings.json を編集し、ClientIdTenant、および ClientSecret フィールドの値を次のように置き換えます。Edit appsettings.json and replace the values of the fields ClientId, Tenant and ClientSecret with the following:

    "Tenant": "Enter_the_Tenant_Id_Here",
    "ClientId": "Enter_the_Application_Id_Here",
    "ClientSecret": "Enter_the_Client_Secret_Here"
    

各値の説明:Where:

  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) IDEnter_the_Application_Id_Here - is the Application (client) ID for the application you registered.
  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。Enter_the_Tenant_Id_Here - replace this value with the Tenant Id or Tenant name (for example, contoso.microsoft.com)
  • Enter_the_Client_Secret_Here - この値を手順 1 で作成されたクライアント シークレットに置き換えます。Enter_the_Client_Secret_Here - replace this value with the client secret created on step 1.

ヒント

アプリケーション (クライアント) IDディレクトリ (テナント) ID の値を見つけるには、Azure portal 上でアプリの [概要] ページに移動します。To find the values of Application (client) ID, Directory (tenant) ID, go to the app's Overview page in the Azure portal. 新しいキーを生成するには、 [証明書とシークレット] ページに移動します。To generate a new key, go to Certificates & secrets page.

この時点でアプリケーションを実行すると、HTTP 403 - Forbidden エラー "Insufficient privileges to complete the operation" が表示されます。If you try to run the application at this point, you'll receive HTTP 403 - Forbidden error: Insufficient privileges to complete the operation. これは、すべての "アプリ専用のアクセス許可" には管理者の同意が必要であるために発生します。これは、ディレクトリのグローバル管理者にお使いのアプリケーションに同意してもらう必要があることを意味します。This happens because any app-only permission requires Admin consent, which means that a global administrator of your directory must give consent to your application. ご自身のロールに応じて、次のオプションのいずれかを選択します。Select one of the options below depending on your role:

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

グローバル テナント管理者である場合は、Azure portal から [エンタープライズ アプリケーション] に移動します。自分のアプリの登録をクリックし、左側のナビゲーション ペインの [セキュリティ] セクションから [アクセス許可] を選択します。If you are a global tenant administrator, in the Azure Portal navigate to Enterprise applications > Click on your app registration > Choose "Permissions" from the Security section of the left navigation pane. [<テナント名> に管理者の同意を与えます] という大きいボタンをクリックします (<テナント名> は自分のディレクトリの名前)。Click on the large button labeled Grant admin consent for {Tenant Name} (Where {Tenant Name} is the name of your directory).

グローバル管理者の場合は、 [API のアクセス許可] ページに移動し、 [Enter_the_Tenant_Name_Here に管理者の同意を与えます] を選択します。If you are a global administrator, go to API Permissions page select Grant admin consent for Enter_the_Tenant_Name_Here

標準ユーザーStandard user

テナントの標準ユーザーの場合は、お使いのアプリケーションに管理者の同意を与えるようグローバル管理者に依頼する必要があります。If you're a standard user of your tenant, then you need to ask a global administrator to grant admin consent for your application. これを行うには、次の URL を管理者に知らせます。To do this, give the following URL to your administrator:

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

各値の説明:Where:

  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。Enter_the_Tenant_Id_Here - replace this value with the Tenant Id or Tenant name (for example, contoso.microsoft.com)
  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) IDEnter_the_Application_Id_Here - is the Application (client) ID for the application you registered.

注意

前の URL を使用してアプリに同意を与えた後でエラー "AADSTS50011:No reply address is registered for the application" (AADSTS50011: アプリケーションの応答アドレスが登録されていません) が表示される場合があります。You may see the error 'AADSTS50011: No reply address is registered for the application' after granting consent to the app using the preceding URL. これは、このアプリケーションと URL にはリダイレクト URI がないために発生します。このエラーは無視してください。This happen because this application and the URL do not have a redirect URI - please ignore the error.

手順 4:アプリケーションの実行Step 4: Run the application

手順 5:アプリケーションの実行Step 5: Run the application

Visual Studio または Visual Studio for Mac を使用している場合は、F5 キーを押してアプリケーションを実行します。それ以外の場合は、コマンド プロンプト、コンソール、またはターミナルを使用してアプリケーションを実行します。If you're using Visual Studio or Visual Studio for Mac, press F5 to run the application, otherwise, run the application via command prompt, console, or terminal:

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

各値の説明:Where:

  • {ProjectFolder} は zip ファイルを抽出したフォルダーです。{ProjectFolder} is the folder where you extracted the zip file. 例: C:\Azure-Samples\active-directory-dotnetcore-daemon-v2Example C:\Azure-Samples\active-directory-dotnetcore-daemon-v2

結果として、Azure AD ディレクトリ内のユーザーの一覧が表示されます。You should see a list of users in your Azure AD directory as result.

重要

このクイック スタート アプリケーションは、クライアント シークレットを使用して、それ自体を機密クライアントとして識別します。This quickstart application uses a client secret to identify itself as confidential client. クライアント シークレットはプロジェクト ファイルにプレーン テキストとして追加されるため、セキュリティ上の理由から、アプリケーションを運用アプリケーションと見なす前に、クライアント シークレットの代わりに証明書を使用することをお勧めします。Because the client secret is added as a plain-text to your project files, for security reasons, it is recommended that you use a certificate instead of a client secret before considering the application as production application. 証明書の使用方法の詳細については、このサンプルの GitHub リポジトリにあるこれらの手順を参照してください。For more information on how to use a certificate, see these instructions in the GitHub repository for this sample.

詳細情報More information

このサンプルのしくみHow the sample works

このクイック スタートで生成されたサンプル アプリの動作の紹介

MSAL.NETMSAL.NET

MSAL (Microsoft.Identity.Client) はユーザーをサインインし、Microsoft ID プラットフォームによって保護されている API へのアクセス用のトークンを要求するために使用するライブラリです。MSAL (Microsoft.Identity.Client) is the library used to sign in users and request tokens used to access an API protected by Microsoft identity platform. 説明したとおり、このクイック スタートでは、委任されたアクセス許可ではなく、アプリケーション自体の ID を使用してトークンを要求しています。As described, this quickstart requests tokens by using the application own identity instead of delegated permissions. ここで使用される認証フローは、" クライアント資格情報 OAuth フロー " と呼ばれます。The authentication flow used in this case is known as client credentials oauth flow. クライアント資格情報フローで MSAL.NET を使用する方法の詳細については、こちらの記事を参照してください。For more information on how to use MSAL.NET with client credentials flow, see this article.

MSAL.NET は、Visual Studio のパッケージ マネージャー コンソールで次のコマンドを実行することでインストールできます。You can install MSAL.NET by running the following command in Visual Studio's Package Manager Console:

```console
dotnet add package Microsoft.Identity.Client

MSAL の初期化MSAL initialization

MSAL への参照を追加するには、次のコードを追加します。You can add the reference for MSAL by adding the following code:

using Microsoft.Identity.Client;

続いて、次のコードを使用して MSAL を初期化します。Then, initialize MSAL using the following code:

IConfidentialClientApplication app;
app = ConfidentialClientApplicationBuilder.Create(config.ClientId)
                                          .WithClientSecret(config.ClientSecret)
                                          .WithAuthority(new Uri(config.Authority))
                                          .Build();
各値の説明:Where: 説明Description
config.ClientSecret Azure Portal 上でアプリケーションに対して作成されるクライアント シークレット。Is the client secret created for the application in Azure Portal.
config.ClientId Azure portal に登録されているアプリケーションの "アプリケーション (クライアント) ID"。Is the Application (client) ID for the application registered in the Azure portal. この値は、Azure portal のアプリの [概要] ページで確認できます。You can find this value in the app's Overview page in the Azure portal.
config.Authority (省略可能) ユーザーを認証するための STS エンドポイント。(Optional) The STS endpoint for user to authenticate. 通常、パブリック クラウド上では https://login.microsoftonline.com/{tenant} です。{tenant} はご自分のテナントの名前またはテナント ID です。Usually https://login.microsoftonline.com/{tenant} for public cloud, where {tenant} is the name of your tenant or your tenant Id.

詳細については、ConfidentialClientApplication 用の参照ドキュメントをご覧ください。For more information, please see the reference documentation for ConfidentialClientApplication

トークンの要求Requesting tokens

アプリの ID を使用してトークンを要求するには、AcquireTokenForClient メソッドを使用します。To request a token using app's identity, use AcquireTokenForClient method:

result = await app.AcquireTokenForClient(scopes)
                  .ExecuteAsync();
各値の説明:Where: 説明Description
scopes 要求されるスコープが含まれています。Contains the scopes requested. Confidential クライアントの場合は、{Application ID URI}/.default のような形式を使用して、要求されるスコープが Azure Portal 上で設定されるアプリ オブジェクト内に静的に定義されたものであることを示す必要があります (Microsoft Graph では、{Application ID URI}https://graph.microsoft.com を指します)。For confidential clients, this should use the format similar to {Application ID URI}/.default to indicate that the scopes being requested are the ones statically defined in the app object set in the Azure Portal (for Microsoft Graph, {Application ID URI} points to https://graph.microsoft.com). カスタム Web API の場合、{Application ID URI} は、Azure portal 上で [アプリケーションの登録 (プレビュー)] の [API の公開] セクションに定義されます。For custom web APIs, {Application ID URI} is defined under Expose an API section in Azure Portal's Application Registration (Preview).

詳細については、AcquireTokenForClient 用の参照ドキュメントをご覧ください。For more information, please see the reference documentation for AcquireTokenForClient

ヘルプとサポートHelp and support

サポートが必要な場合、問題を報告する場合、またはサポート オプションについて知りたい場合は、開発者向けのヘルプとサポートに関するページを参照してください。If you need help, want to report an issue, or would like to learn about your support options, see Help and support for developers.

次のステップNext steps

デーモン アプリケーションの詳細については、シナリオの概要を参照してください。To learn more about daemon applications, see the scenario overview: