Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Lors de la création d'applications Model Context Protocol (MCP), vous pouvez configurer MSAL Node pour imposer l'acquisition et la mise en cache de tokens délimités à une ressource. Lorsque le mode MCP est activé, MSAL exige que chaque demande de jeton inclue le paramètre resource et met en cache les jetons d’accès en les indexant sur cette ressource.
Note
Les flux MCP sont disponibles uniquement pour les applications clientes publiques.
Prerequisites
- Inscrire une application avec la plateforme d’identités Microsoft
- Une application configurée en tant que client public (par exemple, une application de bureau ou CLI)
-
@azure/msal-nodev5 ou version ultérieure installée dans votre projet
Activer le mode MCP
Définissez isMcp: true dans la configuration auth lors de la création de votre PublicClientApplication:
const config = {
auth: {
clientId: "your-client-id",
authority: "https://login.microsoftonline.com/common",
isMcp: true,
},
};
const pca = new msal.PublicClientApplication(config);
Inclure le paramètre de ressource
Lorsque isMcp est true, chaque demande de jeton doit inclure un paramètre resource. L’omettre génère une erreur resource_parameter_required.
const tokenRequest = {
scopes: ["User.Read"],
redirectUri: "http://localhost:3000/redirect",
resource: "https://example.microsoft.com",
code: authorizationCode,
};
const response = await pca.acquireTokenByCode(tokenRequest);
Important
Définissez le resource paramètre directement sur l’objet de requête. Ne le transmettez pas via extraQueryParameters en même temps que la propriété resource, car cela génère une erreur misplaced_resource_parameter.
L’exemple suivant montre les méthodes correctes et incorrectes pour définir le resource paramètre :
// 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" },
};
Mise en cache délimitée à une ressource
Lorsque isMcp est activé, les jetons d’accès sont mis en cache avec la ressource associée. Cela affecte l’acquisition silencieuse de jetons :
- Accès au cache : si un token d'accès mis en cache existe pour les mêmes étendues et la même ressource, il est renvoyé depuis le cache.
- Manque de cache : si la ressource demandée ne correspond à aucun jeton mis en cache, MSAL revient au réseau pour acquérir un nouveau jeton pour la ressource demandée.
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],
});
Gestion des erreurs
Deux erreurs sont spécifiques aux flux MCP :
| Code d'erreur | Description |
|---|---|
resource_parameter_required |
isMcp est true mais la requête n’inclut pas de resource paramètre. |
misplaced_resource_parameter |
Un élément resource a été trouvé à la fois dans la propriété resource et dans extraQueryParameters. N’utilisez qu’une seule. |
Les deux erreurs sont générées sous la forme de ClientAuthError. Pour plus d’informations, consultez les questions fréquentes (FAQ) sur les nœuds MSAL.
Échantillons
- Exemple de flux MCP : application Express illustrant MCP avec du code d’autorisation et des flux silencieux.