Uso de flujos de MCP con el nodo MSAL

Al desarrollar aplicaciones de Model Context Protocol (MCP), puede configurar MSAL Node para forzar la adquisición y el almacenamiento en caché de tokens con ámbito de recurso. Cuando el modo MCP está habilitado, MSAL requiere que todas las solicitudes de token incluyan un resource parámetro y almacene en caché los tokens de acceso clavedos por ese recurso.

Note

Los flujos de MCP solo están disponibles para las aplicaciones cliente públicas.

Prerequisites

Habilitación del modo MCP

Establezca isMcp: true en la configuración auth al crear su PublicClientApplication:

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

const pca = new msal.PublicClientApplication(config);

Incluir el parámetro de recurso

Cuando isMcp es true, cada solicitud de token debe incluir un resource parámetro. Si se omite, se produce un resource_parameter_required error.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Importante

Establezca el resource parámetro directamente en el objeto de solicitud. No lo pase a través de extraQueryParameters al mismo tiempo que la propiedad resource; si lo hace, se genera un error misplaced_resource_parameter.

En el ejemplo siguiente se muestran las formas correctas e incorrectas de establecer el resource parámetro :

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

Almacenamiento en caché con ámbito de recurso

Cuando isMcp está habilitado, los tokens de acceso se almacenan en caché con su recurso asociado. Esto afecta a la adquisición silenciosa de tokens:

  • Acceso a la caché: si existe un token de acceso almacenado en caché para los mismos ámbitos y recurso, se devuelve desde la caché.
  • Error de caché: si el recurso solicitado no coincide con ningún token almacenado en caché, MSAL vuelve a la red para adquirir un nuevo token para el recurso solicitado.
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],
});

Gestión de errores

Dos errores son específicos de los flujos de MCP:

Código de error Description
resource_parameter_required isMcp es true pero la solicitud no incluye un resource parámetro .
misplaced_resource_parameter Se encontró resource tanto en la propiedad resource como en extraQueryParameters. Use solo una.

Ambos errores se lanzan como ClientAuthError. Para obtener más información, consulte Preguntas más frecuentes sobre el nodo MSAL.

Samples

Pasos siguientes