tenant_id в аргументах MCP: где проверять изоляцию клиентов

Определяйте доступный tenant из доверенного контекста авторизации и проверяйте каждый объект на сервере. Поле tenant_id, которое прислала модель, не является доказательством членства в организации.

Где появляется ошибка

Инструмент получает tenant_id и order_id, затем ищет заказ только по order_id. В демонстрации все идентификаторы принадлежат одной компании, поэтому ошибка незаметна. Когда пользователь подставляет чужой номер заказа, сервер возвращает данные соседнего клиента. Даже если модель обычно берёт tenant_id из правильного места, граница доступа остаётся нарушенной.

Рабочее решение

Свяжите запрос с авторизованным субъектом и его разрешёнными организациями. Если выбор организации нужен пользователю, проверьте членство отдельно, затем примените ограничение при чтении и изменении каждого объекта. Та же логика должна действовать в поиске, кэше, экспорте и фоновых заданиях. Не полагайтесь на то, что клиентский интерфейс не показывает чужие значения. Для сервисной роли с широкими правами особенно важен собственный слой проверок приложения.

Контрольные случаи

ПроверкаОжидаемое поведение
Пользователь компании А читает свой заказОперация работает и журнал связывает субъект, организацию и объект без записи лишних персональных данных.
Тот же пользователь передаёт заказ компании БДоступ отклонён независимо от того, какое tenant_id отправлено в аргументах.
Переключение доступной организации и повтор из кэшаОтвет не смешивает данные организаций; ключ кэша и фоновые задания сохраняют правильную область доступа.

Поиск существования объекта тоже может раскрывать сведения: сообщение «заказ чужой компании» сообщает больше, чем нейтральный отказ. Выберите безопасную внешнюю формулировку, сохраняя точную причину в защищённом журнале.

Пользователь может законно состоять в нескольких организациях. Тогда нужен явный выбор активного контекста и проверка членства, а не жёсткое предположение «один аккаунт — один tenant».

MCP оборачивает бизнес-доступ, поэтому изоляцию клиентов нужно проектировать вместе с контрактами tools и источниками данных. В платном курсе AI Agent Integrations PRO: MCP можно продолжить изучение соответствующего инженерного направления. Перед покупкой сравните программу и открытые материалы со своей задачей.

Документация для проверки технических деталей: OWASP: авторизация.

Следующий шаг: MCP-интеграции: контракты инструментов, ошибки и доступ. По смежным вопросам: MCP теряет длинный ID между Python и JavaScript: где нужен string, MCP tool получает лишние аргументы: где нужна строгая проверка.