Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Протокол контекста модели (MCP) — это открытый стандарт, позволяющий приложениям ИИ безопасно подключаться к внешним средствам, источникам данных и службам. MSAL Browser поддерживает потоки MCP, обеспечивая включение параметра resource во все запросы токенов и кэшируя токены доступа с привязкой к этому ресурсу.
Note
Потоки MCP поддерживаются как для стандартных браузерных приложений с использованием PublicClientApplication, так и для приложений, использующих Nested App Authentication (NAA), с использованием createNestablePublicClientApplication.
Сведения о серверных сценариях реализации см. в статье MSAL Node MCP flows.
Необходимые условия
- Зарегистрируйте приложение на платформе идентификации Microsoft
-
@azure/msal-browserВерсия 5 или более поздняя версия, установленная в проекте
Включение MCP
Задайте isMcp: true в конфигурации auth при создании PublicClientApplication:
const msalConfig = {
auth: {
clientId: "your-client-id",
authority: "https://login.microsoftonline.com/common",
isMcp: true,
},
};
const pca = new msal.PublicClientApplication(msalConfig);
Для приложений NAA используйте ту же конфигурацию с createNestablePublicClientApplication:
const pca = await msal.createNestablePublicClientApplication(msalConfig);
Параметр ресурса
Когда isMcp имеет значение true, каждый запрос на получение токена должен включать параметр resource. Опущение вызывает ошибку resource_parameter_required .
const tokenRequest = {
scopes: ["User.Read"],
resource: "https://example.microsoft.com",
};
Important
resource Задайте параметр непосредственно в объекте запроса. Не передавайте его через extraQueryParameters или extraParameters одновременно со свойством resource — это вызовет ошибку misplaced_resource_parameter.
В следующем примере показаны правильные и неверные способы задания resource параметра:
// Correct
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 возвращается в сеть, чтобы получить новый маркер для запрошенного ресурса.
// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
scopes: ["User.Read"],
resource: "https://resource-a.microsoft.com",
account: account,
});
// Same resource — returns cached token
const token2 = await pca.acquireTokenSilent({
scopes: ["User.Read"],
resource: "https://resource-a.microsoft.com",
account: account,
});
// Different resource — falls back to network
const token3 = await pca.acquireTokenSilent({
scopes: ["User.Read"],
resource: "https://resource-b.microsoft.com",
account: account,
});
Обработка ошибок
Две ошибки относятся к потокам MCP:
| Код ошибки | Description |
|---|---|
resource_parameter_required |
isMcp имеет значение true, но запрос не включает параметр resource. |
misplaced_resource_parameter |
Объект resource был найден как в свойстве resource , так и в extraQueryParameters или extraParameters. Используйте только один. |
Обе ошибки выдаются как ClientAuthError. Дополнительные сведения см. в документации по ошибкам.