この記事では、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}'