Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
При создании приложений Model Context Protocol (MCP) можно настроить MSAL Node так, чтобы обеспечить обязательное получение и кэширование токенов для конкретного ресурса. Если включен режим MCP, MSAL требует, чтобы каждый запрос токена включал resource параметр и кэширует маркеры доступа, ключом которых является этот ресурс.
Note
Потоки MCP доступны только для общедоступных клиентских приложений.
Необходимые условия
- Зарегистрируйте приложение на платформе идентификации Microsoft
- Приложение, настроенное как публичный клиент (например, настольное приложение или приложение с интерфейсом командной строки)
-
@azure/msal-nodeВерсия 5 или более поздняя версия, установленная в проекте
Включение режима MCP
Задайте isMcp: true в конфигурации auth при создании PublicClientApplication:
const config = {
auth: {
clientId: "your-client-id",
authority: "https://login.microsoftonline.com/common",
isMcp: true,
},
};
const pca = new msal.PublicClientApplication(config);
Включение параметра ресурса
Когда isMcp имеет значение true, каждый запрос на получение токена должен включать параметр resource. Опущение вызывает ошибку 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
resource Задайте параметр непосредственно в объекте запроса.
Не передавайте его через extraQueryParameters одновременно со свойством resource — это вызовет ошибку misplaced_resource_parameter.
В следующем примере показаны правильные и неверные способы задания resource параметра:
// 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" },
};
Кэширование на уровне ресурса
Если isMcp включен, маркеры доступа кэшируются вместе со связанным с ними ресурсом. Это влияет на тихое получение токена:
- Попадание в кэш: если в кэше есть маркер доступа для тех же областей действия и ресурса, он возвращается из кэша.
- Ошибка кэша. Если запрошенный ресурс не соответствует кэшированному токену, MSAL возвращается в сеть, чтобы получить новый маркер для запрошенного ресурса.
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],
});
Обработка ошибок
Две ошибки относятся к потокам MCP:
| Код ошибки | Description |
|---|---|
resource_parameter_required |
isMcp имеет значение true, но запрос не включает параметр resource. |
misplaced_resource_parameter |
Объект resource был найден как в свойстве resource , так и в extraQueryParameters. Используйте только один. |
Обе ошибки выдаются как ClientAuthError. Дополнительные сведения см. в часто задаваемых вопросы о узле MSAL.
Samples
- Пример потоков MCP — приложение на Express, демонстрирующее MCP с кодом авторизации и тихими потоками.