Använda MCP-flöden med MSAL Node

När du skapar Model Context Protocol (MCP)-program kan du konfigurera MSAL Node så att resursavgränsad tokeninhämtning och cachelagring tillämpas. När MCP-läget är aktiverat kräver MSAL att varje tokenbegäran innehåller en resource parameter och cachelagrar åtkomsttoken som är nyckelade av den resursen.

Note

MCP-flöden är endast tillgängliga för offentliga klientprogram.

Förutsättningar

Aktivera MCP-läge

Ange isMcp: true i konfigurationen auth när du skapar :PublicClientApplication

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

const pca = new msal.PublicClientApplication(config);

Inkludera resursparametern

När isMcp är truemåste varje tokenbegäran innehålla en resource parameter. Om du utelämnar det utlöser det ett resource_parameter_required fel.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Important

Ange parametern resource direkt på begärandeobjektet. Skicka inte den via extraQueryParameters samtidigt som egenskapen resource — då utlöses ett misplaced_resource_parameter-fel.

I följande exempel visas rätt och felaktiga sätt att ange parametern 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" },
};

Resursbegränsad cachelagring

När isMcp är aktiverat cachelagras åtkomsttoken tillsammans med den resurs de är associerade med. Detta påverkar tyst tokenförvärv:

  • Cacheträff: Om det finns en cachelagrad åtkomsttoken för samma scope och resurs, returneras den från cachen.
  • Cachemiss: Om den begärda resursen inte matchar någon cachelagrad token återgår MSAL till nätverket för att hämta en ny token för den begärda resursen.
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],
});

Felhantering

Två fel är specifika för MCP-flöden:

Felkod Description
resource_parameter_required isMcp är true, men begäran innehåller ingen resource-parameter.
misplaced_resource_parameter En resource hittades både i egenskapen resource och i extraQueryParameters. Använd bara en.

Båda felen kastas som ClientAuthError. Mer information finns i vanliga frågor och svar om MSAL Node.

Samples

  • MCP-flödesexempel – Express-app som demonstrerar MCP med auktoriseringskod och tysta flöden.

Nästa steg