MSAL ノードで機密クライアント アプリケーションを初期化する

この記事では、MSAL ノードで ConfidentialClientApplication オブジェクトを初期化する方法について説明します。 シークレットと証明書を安全に使用する方法と、機関を構成する方法について説明します。

Prerequisites

アプリケーションを初期化する前に、まずアプリケーションをMicrosoft Entra 管理センターに登録し、アプリケーションとMicrosoft ID プラットフォームの間に信頼関係を確立する必要があります。

アプリを登録した後、Microsoft Entra 管理センターで見つかる次の値の一部またはすべてが必要になります。

価値 必須 説明
アプリケーション (クライアント) ID 必須 Microsoft ID プラットフォーム内でアプリケーションを一意に識別する GUID。
権威 Optional アプリケーションの ID プロバイダー URL ( インスタンス) と サインイン対象ユーザー 。 インスタンスとサインイン対象ユーザーが連結されると、権限が構成 されます
ディレクトリ (テナント) ID Optional 組織専用の基幹業務アプリケーションを構築する場合は、ディレクトリ (テナント) ID を指定します(多くの場合、 シングルテナント アプリケーションと呼ばれます)。
リダイレクト URI Optional Web アプリを構築する場合、redirectUriは、ID プロバイダー (Microsoft ID プラットフォーム) が発行したセキュリティ トークンを返す場所を指定します。

ConfidentialClientApplication オブジェクトの初期化

MSAL ノードを使用するには、 ConfidentialClient オブジェクトをインスタンス化する必要があります。

シークレットと証明書を安全に使用する

シークレットはハードコーディングしないでください。 dotenv npm パッケージを使用すると、シークレットの誤アップロードを防ぐために 、.gitignore に含める必要がある .env ファイル (プロジェクトのルート ディレクトリにある) にシークレットまたは証明書を格納できます。

証明書は、NodeJS の fs モジュールを介してファイルから読み取ることもできます。 ただし、プロジェクトのディレクトリに保存しないでください。 運用アプリでは、Azure KeyVault またはその他のセキュリティで保護されたキー コンテナーから証明書をフェッチする必要があります。

詳細については、 証明書とシークレットを 参照してください。

MSAL サンプルを参照してください。 auth-code-with-certs

import * as msal from "@azure/msal-node";
import "dotenv/config"; // process.env now has the values defined in a .env file

const clientAssertionCallback = async (config) => {
    // network request that uses config.clientId and (optionally) config.tokenEndpoint
    const result = await Promise.resolve(
        "network request which gets assertion"
    );
    return result;
};

const clientConfig = {
    auth: {
        clientId: "your_client_id",
        authority: "your_authority",
        clientSecret: process.env.clientSecret, // OR
        clientCertificate: {
            thumbprintSha256: process.env.thumbprint,
            privateKey: process.env.privateKey,
        }, // OR
        clientAssertion: clientAssertionCallback, // or a predetermined clientAssertion string
    },
};
const cca = new msal.ConfidentialClientApplication(clientConfig);

証明書をインポートするときの一般的な問題を参照してください。

構成の基本

ノードの構成オプションには、認証フローごとにcommonパラメーターとspecificパラメーターがあります。

  • clientId は、パブリック クライアント アプリケーションを初期化するために必須です
  • authority構成中にユーザーが設定しない場合、既定値は https://login.microsoftonline.com/common/
  • 機密クライアントには、クライアント資格情報が必須です。 クライアント資格情報は次のいずれかです:
    • clientSecret は、アプリの登録時に生成されるシークレット文字列です。
    • clientCertificate は、アプリの登録に設定された証明書です。 thumbprintSha256は証明書の X.509 SHA-256 拇印であり、privateKeyは PEM でエンコードされた秘密キーです。 x5c は、 サブジェクト名/発行者認証シナリオで使用されるオプションの X.509 証明書チェーンです。
    • clientAssertion は、アサーション文字列または、アプリケーションがトークンを要求するときに使用するアサーション文字列と、アサーションの型 (urn:ietf:params:oauth:client-assertion-type:jwt-bearer) を返すコールバック関数を含む ClientAssertion オブジェクトです。 コールバックは、MSAL がトークン発行者からトークンを取得する必要があるたびに呼び出されます。 アサーションの有効期限が切れ、新しいアサーションを作成する必要があるため、通常、アプリ開発者はコールバックを使用する必要があります。 アプリ開発者は、アサーションの有効期間について責任を負います。 フェデレーション ID 資格情報を使用してダウンストリーム API のトークンを取得するには、 このメカニズム を使用します。

構成に関するその他のオプションについては、「MSAL ノードの構成」を参照してください。

権限の構成

既定では、MSAL は common テナントで構成されます。これは、(B2C ではなく) 個人アカウントを許可するマルチテナント アプリケーションおよびアプリケーションに使用されます。

    authority: 'https://login.microsoftonline.com/common/'

アプリケーションの対象が単一テナントである場合は、次のようにテナント ID を含む authority を指定する必要があります。

    authority: 'https://login.microsoftonline.com/{your_tenant_id}'

次のステップ