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

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

次の図は、サンプル アプリの動作を示しています。

このクイックスタートで生成されたサンプル アプリの動作を示す図。

前提条件

このクイックスタートには、.NET Core 6.0 SDK が必要です。

アプリを登録してダウンロードする

アプリケーションは、自動構成または手動構成を使用してビルドできます。

自動構成

アプリを登録して自動的に構成し、その後コード サンプルをダウンロードするには、次の手順に従います。

  1. アプリの登録用の Azure portal ページに移動します。
  2. アプリケーションの名前を入力し、 [登録] を選択します。
  3. 画面の指示に従ってダウンロードし、1 回クリックするだけで、新しいアプリケーションが自動的に構成されます。

手動構成

アプリケーションとコード サンプルを手動で構成するには、次の手順を使用します。

手順 1:アプリケーションの登録

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順に従います。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター を使用して、アプリケーションを登録する先のテナントに切り替えます。
  3. Azure Active Directory を検索して選択します。
  4. [管理][アプリの登録]>[新規登録] の順に選択します。
  5. [名前] にアプリケーションの名前を入力します。 たとえば、「Daemon-console」と入力します。 アプリのユーザーには、この名前が表示されます。これは後で変更できます。
  6. [登録] を選択して、アプリケーションを作成します。
  7. [管理] で、[証明書とシークレット] を選択します。
  8. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択し、名前を入力して、 [追加] を選択します。 後の手順で使用できるように、シークレットの値を安全な場所に記録します。
  9. [管理] で、 [API のアクセス許可]>[アクセス許可の追加] の順に選択します。 [Microsoft Graph] を選択します。
  10. [アプリケーションのアクセス許可] を選択します。
  11. [ユーザー] ノードで、 [User.Read.All] を選択し、 [アクセス許可の追加] を選択します。

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

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

このプロジェクトは Visual Studio または Visual Studio for Mac で実行でき、コード サンプルからダウンロードできます。

ヒント

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

手順 3:Visual Studio プロジェクトの構成

  1. Windows のパス長の制限によって発生するエラーを回避するために、.zip ファイルをディスクのルートに近いローカル フォルダーに展開します。 たとえば、C:\Azure-Samples に展開します。

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

  3. appsettings.json で、TenantClientIdClientSecret の値を置き換えます。 アプリケーション (クライアント) ID とディレクトリ (テナント) ID の値は、Azure portal のアプリの [概要] ページにあります。

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

    コードで次の手順を実行します。

    • Enter_the_Application_Id_Here は、登録済みアプリケーションのアプリケーション (クライアント) ID です。
    • Enter_the_Tenant_Id_Here をテナント ID またはテナント名 (contoso.microsoft.com など) に置き換えます。
    • Enter_the_Client_Secret_Here を、手順 1 で作成したクライアント シークレットに置き換えます。 新しいキーを生成するには、[証明書とシークレット] ページに移動します。

これでアプリケーションを実行すると、HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation が出力されます。 このエラーが発生するのは、すべてのアプリ専用アクセス許可では、ディレクトリのグローバル管理者がアプリケーションに同意を与える必要があるためです。 ロールに応じて、次のオプションのいずれかを選択します。

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

グローバル テナント管理者の場合は、Azure portal でエンタープライズ アプリケーションにアクセスします。 アプリの登録を選択し、左ペインの [セキュリティ] セクションで [アクセス許可] を選択します。 次に、[{テナント名} に管理者の同意を与えます] というラベルの付いた大きいボタンを選択します ({テナント名} はディレクトリの名前です)。

標準ユーザー

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

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

URL で以下を行ないます。

  • Enter_the_Tenant_Id_Here をテナント ID またはテナント名 (contoso.microsoft.com など) に置き換えます。
  • Enter_the_Application_Id_Here は、登録済みアプリケーションのアプリケーション (クライアント) ID です。

上記の URL を使用してアプリに同意を与えると、エラー AADSTS50011: No reply address is registered for the application が表示されることがあります。 このエラーが発生するのは、アプリケーションと URL にリダイレクト URI がないためです。 このメッセージは無視できます。

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

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

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

このコードでは:

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

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

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

詳細情報

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

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 のリファレンス ドキュメントをご覧ください。

ヘルプとサポート

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

次のステップ

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

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

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

前提条件

このサンプルを実行するには、以下が必要です。

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

手順 1:アプリケーションの登録

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター を使用して、アプリケーションを登録するテナントに切り替えます。
  3. Azure Active Directory を検索して選択します。
  4. [管理][アプリの登録]>[新規登録] の順に選択します。
  5. アプリケーションの名前を入力します (例: Daemon-console)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
  6. [登録] を選択します。
  7. [管理] で、[証明書とシークレット] を選択します。
  8. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択し、名前を入力して、 [追加] を選択します。 後の手順で使用できるように、シークレットの値を安全な場所に記録します。
  9. [管理] で、 [API のアクセス許可]>[アクセス許可の追加] の順に選択します。 [Microsoft Graph] を選択します。
  10. [アプリケーションのアクセス許可] を選択します。
  11. [ユーザー] ノードで、 [User.Read.All] を選択し、 [アクセス許可の追加] を選択します。

手順 2:Python プロジェクトのダウンロード

Python デーモン プロジェクトをダウンロードする

手順 3: Python プロジェクトの構成

  1. ディスクのルートに近いローカル フォルダー (例: C:\Azure-Samples) に zip ファイルを展開します。

  2. サブフォルダー 1-Call-MsGraph-WithSecret に移動します。

  3. parameters.json を編集し、authorityclient_id、および secret フィールドの値を次のスニペットに置き換えます。

    "authority": "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
    "client_id": "Enter_the_Application_Id_Here",
    "secret": "Enter_the_Client_Secret_Here"
    

    各値の説明:

    • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) ID
    • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。
    • Enter_the_Client_Secret_Here - この値を手順 1 で作成されたクライアント シークレットに置き換えます。

ヒント

アプリケーション (クライアント) IDディレクトリ (テナント) ID の値を見つけるには、Azure portal 上でアプリの [概要] ページに移動します。 新しいキーを生成するには、[証明書とシークレット] ページに移動します。&

この時点でアプリケーションを実行すると、HTTP 403 - Forbidden エラー "Insufficient privileges to complete the operation" が表示されます。 これは、すべての "アプリ専用のアクセス許可" には管理者の同意が必要であるために発生します。ディレクトリのグローバル管理者にお使いのアプリケーションに同意してもらう必要があります。 ご自身のロールに応じて、次のオプションのいずれかを選択します。

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

グローバル テナント管理者の場合は、Azure portal で [アプリの登録][API のアクセス許可] ページに移動し、 [{Tenant Name} に管理者の同意を与えます] ({Tenant Name} はお使いのディレクトリの名前) を選択します。

標準ユーザー

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

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

各値の説明:

  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。
  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) ID

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

このサンプルの依存関係を 1 回インストールする必要があります。

pip install -r requirements.txt

次に、コマンド プロンプトまたはコンソールを使用して、アプリケーションを実行します。

python confidential_client_secret_sample.py parameters.json

コンソール出力には、Azure AD ディレクトリ内のユーザーの一覧を表すいくつかの Json フラグメントが表示されます。

重要

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

詳細情報

MSAL Python

MSAL Python は、ユーザーをサインインし、Microsoft ID プラットフォームによって保護されている API にアクセスするトークンを要求するために使用するライブラリです。 説明したとおり、このクイック スタートでは、委任されたアクセス許可ではなく、アプリケーション自体の ID を使用してトークンを要求しています。 ここで使用される認証フローは、" クライアント資格情報 OAuth フロー " と呼ばれます。 デーモン アプリでの MSAL Python の使用方法の詳細については、この記事を参照してください。

MSAL Python は、次の pip コマンドを実行してインストールできます。

pip install msal

MSAL の初期化

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

import msal

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

app = msal.ConfidentialClientApplication(
    config["client_id"], authority=config["authority"],
    client_credential=config["secret"])
各値の説明: 説明
config["secret"] Azure portal 上でアプリケーションに対して作成されるクライアント シークレット。
config["client_id"] Azure portal に登録されているアプリケーションの "アプリケーション (クライアント) ID"。 この値は、Azure portal のアプリの [概要] ページで確認できます。
config["authority"] ユーザーが認証するための STS エンドポイント。 通常、パブリック クラウド上では https://login.microsoftonline.com/{tenant} です。{tenant} はご自分のテナントの名前またはテナント ID です。

詳細については、ConfidentialClientApplication のリファレンス ドキュメントを参照してください。

トークンの要求

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

result = None
result = app.acquire_token_silent(config["scope"], account=None)

if not result:
    logging.info("No suitable token exists in cache. Let's get a new one from AAD.")
    result = app.acquire_token_for_client(scopes=config["scope"])
各値の説明: 説明
config["scope"] 要求されるスコープが含まれています。 機密クライアントの場合は、{Application ID URI}/.default のような形式を使用して、要求されるスコープが Azure portal で設定されるアプリ オブジェクト内に静的に定義されたものであることを示す必要があります (Microsoft Graph では、{Application ID URI}https://graph.microsoft.com を指します)。 カスタム Web API の場合、{Application ID URI} は、Azure portal で [アプリの登録][API の公開] セクションに定義されます。

詳細については、AcquireTokenForClient のリファレンス ドキュメントを参照してください。

ヘルプとサポート

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

次のステップ

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

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

このクイックスタートでは、クライアント資格情報の付与Node.js 用 Microsoft Authentication Library (MSAL Node) を使用します。

前提条件

サンプル アプリケーションを登録してダウンロードする

まず、以下の手順に従ってください。

手順 1:アプリケーションを登録する

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター を使用して、アプリケーションを登録するテナントに切り替えます。
  3. Azure Active Directory を検索して選択します。
  4. [管理][アプリの登録]>[新規登録] の順に選択します。
  5. アプリケーションの名前を入力します (例: msal-node-cli)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
  6. [登録] を選択します。
  7. [管理] で、[証明書とシークレット] を選択します。
  8. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択し、名前を入力して、 [追加] を選択します。 後の手順で使用できるように、シークレットの値を安全な場所に記録します。
  9. [管理] で、 [API のアクセス許可]>[アクセス許可の追加] の順に選択します。 [Microsoft Graph] を選択します。
  10. [アプリケーションのアクセス許可] を選択します。
  11. [ユーザー] ノードで、 [User.Read.All] を選択し、 [アクセス許可の追加] を選択します。

手順 2: Node.js サンプル プロジェクトをダウンロードする

コード サンプルをダウンロードします

手順 3: Node.js サンプル プロジェクトを構成する

  1. ディスクのルートに近いローカル フォルダー (例: C:/Azure-Samples) に ZIP ファイルを展開します。
  2. .env を編集し、TENANT_IDCLIENT_IDCLIENT_SECRET の各フィールドの値を次のスニペットに置き換えます。
"TENANT_ID": "Enter_the_Tenant_Id_Here",
 "CLIENT_ID": "Enter_the_Application_Id_Here",
 "CLIENT_SECRET": "Enter_the_Client_Secret_Here"

各値の説明:

  • Enter_the_Application_Id_Here - 前に登録したアプリケーションのアプリケーション (クライアント) ID。 この ID は、Azure portal からアプリの登録の [概要] ペインで確認できます。
  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。 これらの値は、Azure portal からアプリの登録の [概要] ペインで確認できます。
  • Enter_the_Client_Secret_Here - この値を、前に作成したクライアント シークレットに置き換えます。 新しいキーを生成するには、Azure portal でアプリの登録設定の [証明書とシークレット] を使用します。&

ソース コードでプレーンテキスト シークレットを使用すると、セキュリティ リスクが増大します。 このクイックスタートのサンプルではプレーンテキスト クライアント シークレットを使用していますが、これはわかりやすくすることのみが目的です。 機密性の高いクライアント アプリケーション、特に運用環境へのデプロイを予定しているアプリでは、クライアント シークレットではなく、証明書の資格情報を使用することをお勧めします。

  1. .env を編集し、Azure AD エンドポイントと Microsoft Graph エンドポイントを次の値に置き換えます。
    • Azure AD エンドポイントについては、Enter_the_Cloud_Instance_Id_Herehttps://login.microsoftonline.com に置き換えます。
    • Microsoft Graph エンドポイントについては、Enter_the_Graph_Endpoint_Herehttps://graph.microsoft.com/ に置き換えます。

この時点でアプリケーションを実行すると、HTTP 403 - Forbidden エラー "Insufficient privileges to complete the operation" が表示されます。 これは、すべての "アプリ専用のアクセス許可" には管理者の同意が必要であるために発生します。ディレクトリのグローバル管理者にお使いのアプリケーションに同意してもらう必要があります。 ご自身のロールに応じて、次のオプションのいずれかを選択します。

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

グローバル テナント管理者の場合は、Azure portal 上で [アプリケーションの登録] の [API のアクセス許可] ページに移動し、[ に管理者の同意を与えます] ( はお使いのディレクトリの名前) を選択します。

標準ユーザー

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

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

各値の説明:

  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。
  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) ID

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

コマンド プロンプトまたはコンソールで、(package.json が存在する) サンプルのルート フォルダーを探します。 初めて実行する前に、サンプル アプリで必要な依存関係をインストールする必要があります。

npm install

次に、コマンド プロンプトまたはコンソールを使用して、アプリケーションを実行します。

node . --op getUsers

コンソール出力には、Azure AD ディレクトリ内のユーザーの一覧を表すいくつかの JSON フラグメントが表示されます。

コードについて

以降、サンプル アプリケーションのいくつかの重要な要素について説明します。

MSAL Node

MSAL Node はユーザーのサインインを処理し、Microsoft ID プラットフォームによって保護されている API にアクセスするトークンを要求するために使用するライブラリです。 説明したとおり、このクイックスタートでは、委任されたアクセス許可ではなく、アプリケーションのアクセス許可 (アプリケーション自体の ID) を使用してトークンを要求しています。 ここで使用される認証フローは、OAuth 2.0 クライアント資格情報フローと呼ばれます。 デーモン アプリでの MSAL Node の使用方法の詳細については、デーモン アプリケーションのシナリオを参照してください。

MSAL Node は、次の npm コマンドを実行してインストールできます。

npm install @azure/msal-node --save

MSAL の初期化

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

const msal = require('@azure/msal-node');

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

const msalConfig = {
    auth: {
        clientId: "Enter_the_Application_Id_Here",
        authority: "https://login.microsoftonline.com/Enter_the_Tenant_Id_Here",
        clientSecret: "Enter_the_Client_Secret_Here",
   }
};
const cca = new msal.ConfidentialClientApplication(msalConfig);
各値の説明: 説明
clientId Azure portal に登録されているアプリケーションの "アプリケーション (クライアント) ID"。 この値は、Azure portal のアプリの [概要] ページで確認できます。
authority ユーザーが認証するための STS エンドポイント。 通常、パブリック クラウド上では https://login.microsoftonline.com/{tenant} です。{tenant} はご自分のテナントの名前またはテナント ID です。
clientSecret Azure portal 上でアプリケーションに対して作成されるクライアント シークレット。

詳細については、ConfidentialClientApplication 用の参照ドキュメントをご覧ください。

トークンの要求

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

const tokenRequest = {
    scopes: [ 'https://graph.microsoft.com/.default' ],
};

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

ヘルプとサポート

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

次の手順

MSAL Node を使用したデーモン (コンソール) アプリ開発については、次のチュートリアルを参照してください。

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

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

前提条件

このサンプルを実行するには、以下が必要です。

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

クイック スタート アプリケーションを開始する方法としては、次の 2 つの選択肢があります。[簡易] (以下のオプション 1) と [手動] (オプション 2)

オプション 1: アプリを登録して自動構成を行った後、コード サンプルをダウンロードする

  1. Azure portal のアプリの登録クイックスタート エクスペリエンスに移動します。
  2. アプリケーションの名前を入力し、 [登録] を選択します。
  3. 画面の指示に従ってダウンロードし、1 回クリックするだけで、新しいアプリケーションが自動的に構成されます。

オプション 2:アプリケーションを登録し、アプリケーションとコード サンプルを手動で構成する

手順 1:アプリケーションの登録

アプリケーションを登録し、その登録情報をソリューションに手動で追加するには、次の手順を実行します。

  1. Azure portal にサインインします。
  2. 複数のテナントにアクセスできる場合は、トップ メニューの [ディレクトリとサブスクリプション] フィルター を使用して、アプリケーションを登録するテナントに切り替えます。
  3. Azure Active Directory を検索して選択します。
  4. [管理][アプリの登録]>[新規登録] の順に選択します。
  5. アプリケーションの名前を入力します (例: Daemon-console)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
  6. [登録] を選択します。
  7. [管理] で、[証明書とシークレット] を選択します。
  8. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択し、名前を入力して、 [追加] を選択します。 後の手順で使用できるように、シークレットの値を安全な場所に記録します。
  9. [管理] で、 [API のアクセス許可]>[アクセス許可の追加] の順に選択します。 [Microsoft Graph] を選択します。
  10. [アプリケーションのアクセス許可] を選択します。
  11. [ユーザー] ノードで、 [User.Read.All] を選択し、 [アクセス許可の追加] を選択します。

手順 2:Java プロジェクトのダウンロード

Java デーモン プロジェクトをダウンロードする

手順 3: Java プロジェクトの構成

  1. ディスクのルートに近いローカル フォルダー (例: C:\Azure-Samples) に zip ファイルを展開します。
  2. サブフォルダー msal-client-credential-secret に移動します。
  3. src\main\resources\application.properties を編集し、AUTHORITYCLIENT_ID、および SECRET フィールドの値を次のスニペットに置き換えます。
  AUTHORITY=https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/
  CLIENT_ID=Enter_the_Application_Id_Here
  SECRET=Enter_the_Client_Secret_Here

各値の説明:

  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) ID
  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。
  • Enter_the_Client_Secret_Here - この値を手順 1 で作成されたクライアント シークレットに置き換えます。

ヒント

アプリケーション (クライアント) IDディレクトリ (テナント) ID の値を見つけるには、Azure portal 上でアプリの [概要] ページに移動します。 新しいキーを生成するには、[証明書とシークレット] ページに移動します。&

この時点でアプリケーションを実行すると、HTTP 403 - Forbidden エラー "Insufficient privileges to complete the operation" が表示されます。 これは、すべての "アプリ専用のアクセス許可" には管理者の同意が必要であるために発生します。ディレクトリのグローバル管理者にお使いのアプリケーションに同意してもらう必要があります。 ご自身のロールに応じて、次のオプションのいずれかを選択します。

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

グローバル テナント管理者の場合は、Azure portal で [アプリの登録][API のアクセス許可] ページに移動し、 [{Tenant Name} に管理者の同意を与えます] ({Tenant Name} はお使いのディレクトリの名前) を選択します。

標準ユーザー

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

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

各値の説明:

  • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。
  • Enter_the_Application_Id_Here - 登録したアプリケーションのアプリケーション (クライアント) ID

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

このサンプルは、IDE から ClientCredentialGrant.java の main メソッドを実行することで直接テストできます。

シェルまたはコマンド ラインから:

$ mvn clean compile assembly:single

/targets ディレクトリに msal-client-credential-secret-1.0.0.jar ファイルが生成されます。 次のように Java 実行可能ファイルを使用してこれを実行します。

$ java -jar msal-client-credential-secret-1.0.0.jar

実行後、構成済みのテナントに存在するユーザーが一覧表示されます。

重要

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

説明

MSAL Java

MSAL Java はユーザーのサインインを処理し、Microsoft ID プラットフォームによって保護されている API にアクセスするトークンを要求するために使用するライブラリです。 説明したとおり、このクイック スタートでは、委任されたアクセス許可ではなく、アプリケーション自体の ID を使用してトークンを要求しています。 ここで使用される認証フローは、" クライアント資格情報 OAuth フロー " と呼ばれます。 デーモン アプリでの MSAL Java の使用方法の詳細については、この記事を参照してください。

Maven または Gradle を使用して、アプリケーションに MSAL4J を追加し、アプリケーションの pom.xml (Maven) または build.gradle (Gradle) ファイルに対して以下の変更を行うことで、依存関係を管理します。

pom.xml 内:

<dependency>
    <groupId>com.microsoft.azure</groupId>
    <artifactId>msal4j</artifactId>
    <version>1.0.0</version>
</dependency>

build.gradle 内:

compile group: 'com.microsoft.azure', name: 'msal4j', version: '1.0.0'

MSAL の初期化

MSAL for Java を使用するファイルの先頭に次のコードを追加して、MSAL4J への参照を追加します。

import com.microsoft.aad.msal4j.*;

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

IClientCredential credential = ClientCredentialFactory.createFromSecret(CLIENT_SECRET);

ConfidentialClientApplication cca =
        ConfidentialClientApplication
                .builder(CLIENT_ID, credential)
                .authority(AUTHORITY)
                .build();
各値の説明: 説明
CLIENT_SECRET Azure portal 上でアプリケーションに対して作成されるクライアント シークレット。
CLIENT_ID Azure portal に登録されているアプリケーションの "アプリケーション (クライアント) ID"。 この値は、Azure portal のアプリの [概要] ページで確認できます。
AUTHORITY ユーザーが認証するための STS エンドポイント。 通常、パブリック クラウド上では https://login.microsoftonline.com/{tenant} です。{tenant} はご自分のテナントの名前またはテナント ID です。

トークンの要求

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

IAuthenticationResult result;
     try {
         SilentParameters silentParameters =
                 SilentParameters
                         .builder(SCOPE)
                         .build();

         // try to acquire token silently. This call will fail since the token cache does not
         // have a token for the application you are requesting an access token for
         result = cca.acquireTokenSilently(silentParameters).join();
     } catch (Exception ex) {
         if (ex.getCause() instanceof MsalException) {

             ClientCredentialParameters parameters =
                     ClientCredentialParameters
                             .builder(SCOPE)
                             .build();

             // Try to acquire a token. If successful, you should see
             // the token information printed out to console
             result = cca.acquireToken(parameters).join();
         } else {
             // Handle other exceptions accordingly
             throw ex;
         }
     }
     return result;
各値の説明: 説明
SCOPE 要求されるスコープが含まれています。 機密クライアントの場合は、{Application ID URI}/.default のような形式を使用して、要求されるスコープが Azure portal で設定されるアプリ オブジェクト内に静的に定義されたものであることを示す必要があります (Microsoft Graph では、{Application ID URI}https://graph.microsoft.com を指します)。 カスタム Web API の場合、{Application ID URI} は、Azure portal で [アプリの登録][API の公開] セクションに定義されます。

ヘルプとサポート

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

次のステップ

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