MCP-stromen gebruiken met MSAL-knooppunt

Wanneer u MCP-toepassingen (Model Context Protocol) bouwt, kunt u MSAL Node configureren om het verkrijgen en opslaan van tokens binnen het bereik van resources af te dwingen. Wanneer de MCP-modus is ingeschakeld, vereist MSAL dat elke tokenaanvraag een parameter resource bevat en slaat het toegangstokens op in de cache, waarbij die resource als sleutel wordt gebruikt.

Note

MCP-stromen zijn alleen beschikbaar voor openbare clienttoepassingen.

Prerequisites

MCP-modus inschakelen

Stel isMcp: true in in de configuratie auth wanneer u uw PublicClientApplication maakt:

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

const pca = new msal.PublicClientApplication(config);

De resourceparameter opnemen

Wanneer isMcptrue is, moet elke tokenaanvraag een resource parameter bevatten. Als u deze weglaat, treedt er een resource_parameter_required fout op.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Important

Stel de resource parameter rechtstreeks in het aanvraagobject in. Geef het niet door op extraQueryParameters hetzelfde moment als de resource eigenschap. Als u dit doet, treedt er een misplaced_resource_parameter fout op.

In het volgende voorbeeld ziet u de juiste en onjuiste manieren om de resource parameter in te stellen:

// 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" },
};

Caching op resourceniveau

Wanneer isMcp is ingeschakeld, worden toegangstokens in de cache opgeslagen samen met de bijbehorende resource. Dit heeft invloed op het stil ophalen van tokens:

  • Cachetreffer: Als er een toegangstoken in de cache bestaat voor dezelfde scopes en resource, wordt het uit de cache opgehaald.
  • Cache ontbreekt: als de aangevraagde resource niet overeenkomt met een token in de cache, valt MSAL terug naar het netwerk om een nieuw token voor de aangevraagde resource te verkrijgen.
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],
});

Foutafhandeling

Twee fouten zijn specifiek voor MCP-stromen:

Foutcode Description
resource_parameter_required isMcp is true, maar de aanvraag bevat geen parameter resource.
misplaced_resource_parameter Er is zowel in de eigenschap resource als in extraQueryParameters een resource gevonden. Gebruik slechts één.

Beide fouten worden opgeworpen als ClientAuthError. Zie veelgestelde vragen over MSAL Node voor meer informatie.

Samples

Volgende stappen