Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Ao criar aplicativos Model Context Protocol (MCP), você pode configurar o MSAL Node para impor a obtenção e o armazenamento em cache de tokens com escopo ao recurso. Quando o modo MCP está habilitado, a MSAL requer que cada solicitação de token inclua um resource parâmetro e armazene em cache tokens de acesso chaveados por esse recurso.
Note
Os fluxos mcp estão disponíveis somente para aplicativos cliente públicos.
Pré-requisitos
- Registre um aplicativo na plataforma de identidade da Microsoft
- Um aplicativo configurado como um cliente público (por exemplo, um aplicativo da área de trabalho ou da CLI)
-
@azure/msal-nodev5 ou superior instalada no seu projeto
Habilitar o modo MCP
Defina isMcp: true na configuração auth ao criar seu PublicClientApplication:
const config = {
auth: {
clientId: "your-client-id",
authority: "https://login.microsoftonline.com/common",
isMcp: true,
},
};
const pca = new msal.PublicClientApplication(config);
Incluir o parâmetro de recurso
Quando isMcp for true, cada solicitação de token deve incluir um parâmetro resource. Omitir isso gerará um resource_parameter_required erro.
const tokenRequest = {
scopes: ["User.Read"],
redirectUri: "http://localhost:3000/redirect",
resource: "https://example.microsoft.com",
code: authorizationCode,
};
const response = await pca.acquireTokenByCode(tokenRequest);
Importante
Defina o resource parâmetro diretamente no objeto de solicitação.
Não o passe por extraQueryParameters ao mesmo tempo que a propriedade resource — isso gera um erro misplaced_resource_parameter.
O exemplo a seguir mostra as maneiras corretas e incorretas de definir o 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" },
};
Cache com escopo de recurso
Quando isMcp estiver habilitado, os tokens de acesso serão armazenados em cache com o recurso associado. Isso afeta a aquisição silenciosa de token:
- Acerto de cache: se houver um token de acesso armazenado em cache para os mesmos escopos e recursos, ele será retornado do cache.
- Falha de cache: se o recurso solicitado não corresponder a nenhum token armazenado em cache, a MSAL retornará à rede para adquirir um novo token para o 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],
});
Tratamento de erros
Dois erros são específicos para fluxos MCP:
| Código do erro | Description |
|---|---|
resource_parameter_required |
isMcp é true , mas a solicitação não inclui um resource parâmetro. |
misplaced_resource_parameter |
Um resource foi encontrado tanto na propriedade resource quanto em extraQueryParameters. Use apenas um. |
Ambos os erros são gerados como ClientAuthError. Para obter mais informações, consulte Perguntas frequentes sobre o MSAL Node.
Exemplos
- Exemplo de fluxos do MCP – aplicativo expresso demonstrando MCP com código de autorização e fluxos silenciosos.