MCP-stromen gebruiken met MSAL Browser

Model Context Protocol (MCP) is een open standaard waarmee AI-toepassingen veilig verbinding kunnen maken met externe hulpprogramma's, gegevensbronnen en services. MSAL Browser ondersteunt MCP-flows door af te dwingen dat alle tokenaanvragen de parameter resource bevatten en toegangstokens in de cache op te slaan, waarbij die resource als sleutel wordt gebruikt.

Note

MCP-stromen worden ondersteund voor zowel standaard browsertoepassingen die gebruikmaken van PublicClientApplication als toepassingen voor Nested App Authentication (NAA) die gebruikmaken van createNestablePublicClientApplication.

Zie MSAL Node MCP-stromen voor implementaties aan de serverzijde.

Prerequisites

MCP inschakelen

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

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

const pca = new msal.PublicClientApplication(msalConfig);

Gebruik voor NAA-toepassingen dezelfde configuratie met createNestablePublicClientApplication:

const pca = await msal.createNestablePublicClientApplication(msalConfig);

Resourceparameter

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"],
    resource: "https://example.microsoft.com",
};

Important

Stel de resource parameter rechtstreeks in het aanvraagobject in. Geef het niet door via extraQueryParameters of extraParameters op 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
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 gedrag beïnvloedt het op de achtergrond ophalen van tokens:

  • Cachetreffer: Als er een toegangstoken in de cache bestaat voor dezelfde scopes en resource, wordt het uit de cache geretourneerd.
  • 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.
// 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,
});

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 of extraParameters een resource gevonden. Gebruik slechts één.

Beide fouten worden opgeworpen als ClientAuthError. Zie de documentatie over fouten voor meer informatie.

Volgende stappen