MSAL ノードで MCP フローを使用する

モデル コンテキスト プロトコル (MCP) アプリケーションを構築するときに、リソース スコープのトークンの取得とキャッシュを適用するように MSAL ノードを構成できます。 MCP モードが有効になっている場合、MSAL では、すべてのトークン要求に resource パラメーターを含める必要があり、そのリソースによってキー指定されたアクセス トークンがキャッシュされます。

Note

MCP フローは、パブリック クライアント アプリケーションでのみ使用できます。

Prerequisites

MCP モードを有効にする

PublicClientApplication の作成時に、auth 構成で isMcp: true を設定します:

const config = {
    auth: {
        clientId: "your-client-id",
        authority: "https://login.microsoftonline.com/common",
        isMcp: true,
    },
};

const pca = new msal.PublicClientApplication(config);

リソース パラメーターを含める

isMcptrueされると、すべてのトークン要求に パラメーターが含まれているresource。 省略すると、resource_parameter_required エラーになります。

const tokenRequest = {
    scopes: ["User.Read"],
    redirectUri: "http://localhost:3000/redirect",
    resource: "https://example.microsoft.com",
    code: authorizationCode,
};

const response = await pca.acquireTokenByCode(tokenRequest);

Important

resource パラメーターを要求オブジェクトに直接設定します。 extraQueryParameters経由でresourceプロパティと同時に渡さないでください。—そうするとmisplaced_resource_parameterエラーが発生します。

次の例は、 resource パラメーターを設定する正しい方法と正しくない方法を示しています。

// Correct — resource on the request object
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
};

// Wrong — resource in both locations
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
    extraQueryParameters: { resource: "https://example.microsoft.com" },
};

リソース単位のキャッシュ

isMcpが有効になっている場合、アクセス トークンは関連付けられているリソースと共にキャッシュされます。 これは、サイレント トークンの取得に影響します。

  • キャッシュ ヒット: 同じスコープ リソースに対してキャッシュされたアクセス トークンが存在する場合は、キャッシュから返されます。
  • キャッシュ ミス: 要求されたリソースがキャッシュされたトークンと一致しない場合、MSAL はネットワークにフォールバックして、要求されたリソースの新しいトークンを取得します。
const msalTokenCache = pca.getTokenCache();
const accounts = await msalTokenCache.getAllAccounts();

// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: accounts[0],
});

// Same resource — returns cached token
const token2 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: accounts[0],
});

// Different resource — falls back to network
const token3 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-b.microsoft.com",
    account: accounts[0],
});

エラー処理

2 つのエラーは、MCP フローに固有です。

エラー コード 説明
resource_parameter_required isMcptrue ですが、要求に resource パラメーターは含まれません。
misplaced_resource_parameter resource プロパティと resource の両方でextraQueryParametersが見つかりました。 1 つだけを使用します。

両方のエラーは ClientAuthError としてスローされます。 詳細については、 MSAL ノードに関する FAQ を参照してください。

Samples

次のステップ