Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
- Registro de una aplicación en la plataforma de identidad de Microsoft
- Una aplicación configurada como cliente público (por ejemplo, una aplicación de escritorio o cli)
-
@azure/msal-nodev5 o superior instalada en tu proyecto
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
- Ejemplo de flujos de MCP : aplicación express que muestra MCP con código de autorización y flujos silenciosos.