クイック スタート: Node.js コンソール アプリからトークンを取得し、Microsoft Graph を呼び出す

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

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

前提条件

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

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

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

ヒント

この記事の手順は、開始するポータルによって若干異なる場合があります。

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

  1. 少なくとも アプリケーション管理者 の権限で Microsoft Entra 管理センター にサインインします。
  2. [ID]>[アプリケーション]>[アプリの登録] を参照します。
  3. [新規登録] を選択します。
  4. アプリケーションの名前を入力します (例: msal-node-cli)。 この名前は、アプリのユーザーに表示される場合があります。また、後で変更することができます。
  5. 登録 を選択します。
  6. [管理] で、[証明書とシークレット] を選択します。
  7. [クライアント シークレット] で、 [新しいクライアント シークレット] を選択し、名前を入力して、 [追加] を選択します。 後の手順で使用できるように、シークレットの値を安全な場所に記録します。
  8. [管理] で、 [API のアクセス許可]>[アクセス許可の追加] の順に選択します。 [Microsoft Graph] を選択します。
  9. [アプリケーションのアクセス許可] を選択します。
  10. [ユーザー] ノードで、 [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 を確認します。
    • Enter_the_Tenant_Id_Here - この値をテナント ID またはテナント名 (例: contoso.microsoft.com) に置き換えます。 アプリ登録の [概要] でこれらの値を確認します。
    • Enter_the_Client_Secret_Here - この値を、前に作成したクライアント シークレットに置き換えます。 新しいキーを生成するには、アプリの登録設定の [証明書とシークレット] を使います。

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

  3. .env を編集し、Microsoft Entra ID と Microsoft Graph の各エンドポイントを次の値に置き換えます。

    • Microsoft Entra エンドポイントについては、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 のアクセス許可] ページに移動し、[{Tenant Name} に管理者の同意を与えます] ({Tenant Name} はお使いのディレクトリの名前) を選びます。

Standard ユーザー

あなたがテナントの標準ユーザーである場合は、アプリケーションに対する管理者の同意を与えてくれるように全体管理者に依頼する必要があります。 これを行うには、次の 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

コンソール出力には、Microsoft Entra ディレクトリ内のユーザーの一覧を表すいくつかの 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 を使用したデーモン (コンソール) アプリ開発については、次のチュートリアルを参照してください。