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 получает лишние аргументы: где нужна строгая проверка.
