使用 MSAL 瀏覽器的 MCP 流程

模型情境協定(MCP) 是一項開放標準,使 AI 應用程式能安全地與外部工具、資料來源及服務連接。 MSAL 瀏覽器支援 MCP 流程,強制所有令牌請求包含 resource 參數,並快取由該資源鍵入的存取權杖。

Note

MCP 流程同時支援使用 PublicClientApplication 的標準瀏覽器應用程式,以及使用 createNestablePublicClientApplication 的巢狀應用程式驗證(NAA)應用程式。

關於伺服器端實作,請參見 MSAL 節點 MCP 流程

先決條件

啟用 MCP

建立 PublicClientApplication 時,請在 auth 設定中設定 isMcp: true

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

const pca = new msal.PublicClientApplication(msalConfig);

對於 NAA 應用,請使用相同的配置:createNestablePublicClientApplication

const pca = await msal.createNestablePublicClientApplication(msalConfig);

資源參數

isMcptrue時,每個標記請求 必須 包含一個 resource 參數。 省略會產生 resource_parameter_required 錯誤。

const tokenRequest = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
};

Important

直接在請求物件上設定參數 resource 。 不要同時extraQueryParametersextraParameters或透過resource屬性傳遞,否則會出misplaced_resource_parameter錯。

以下範例展示了參數設定 resource 的正確與錯誤方法:

// Correct
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 會退回網路以取得該資源的新標記。
// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: account,
});

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

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

錯誤處理

有兩個錯誤是 MCP 流程特有的:

錯誤代碼 Description
resource_parameter_required isMcptrue,但該請求未包含 resource 參數。
misplaced_resource_parameter resource 屬性以及 extraQueryParametersextraParameters 中都發現了一個 resource。 只用一個。

兩個錯誤都會以 ClientAuthError 的形式拋出。 欲了解更多資訊,請參閱 錯誤文件

下一步