Безопасность MCP с OAuth 2.1: обнаружение, авторизация и доступ
Почему OAuth 2.1 в MCP
OAuth 2.1 является официально предписанным стандартом авторизации в спецификации Model Context Protocol. Он обеспечивает современный и стандартизированный подход к управлению доступом клиентов к защищенным MCP серверам. Спецификация требует, чтобы серверы авторизации реализовали OAuth 2.1 с соответствующими мерами безопасности для конфиденциальных и публичных клиентов.
Фаза обнаружения
Когда MCP клиент обращается к защищенному ресурсу, сервер возвращает статус 401 Unauthorized и включает заголовок WWW-Authenticate, указывающий на сервер авторизации. Клиент использует метаданные авторизационной службы для обнаружения поддерживаемых возможностей, эндпойнтов и требований. На этом этапе клиент узнает, поддерживается ли динамическая регистрация, какие OAuth потоки доступны и какие меры безопасности применяются.
Регистрация и авторизация
После обнаружения клиент приступает к регистрации и получению авторизации.
Динамическая регистрация клиентов
Если сервер авторизации поддерживает динамическую регистрацию, клиент может автоматически зарегистрироваться, отправив базовую информацию: имя клиента, тип, redirect URI и запрашиваемые области доступа. Сервер возвращает учетные данные клиента, обычно client_id и client_secret, что упрощает интеграцию и масштабирование в автоматизированных средах.
Выбор OAuth потока
- Authorization Code flow: используется при действии от имени человека. Пользователь дает согласие, после чего сервер выдаёт код авторизации, который клиент меняет на токен доступа. Для защиты обмена кода требуется PKCE.
- Client Credentials flow: используется для взаимодействия между машинами, когда пользователя нет. Клиент аутентифицируется на сервере авторизации и получает токен доступа с нужными правами.
Фаза доступа
С полученным токеном доступа клиент прикрепляет его к запросам к MCP серверу. Сервер валидирует токен, проверяет соответствие запрашиваемым областям (scopes) и только затем обрабатывает запрос. Все события доступа и решения по авторизации должны логироваться для аудита и контроля соответствия.
Ключевые улучшения безопасности в MCP OAuth 2.1
MCP дополняет OAuth 2.1 обязательными и рекомендуемыми мерами безопасности:
Обязательный PKCE
Все MCP клиенты обязаны использовать PKCE. Эта схема создаёт пару verifier и challenge, что позволяет обменять код авторизации только тому клиенту, который изначально запросил его, предотвращая атаки перехвата кода.
Строгая валидация redirect URI
Клиенты должны заранее регистрировать точные redirect URI. Сервер авторизации проверяет точное совпадение во время авторизации, что препятствует перенаправлению токенов на сторонние адреса.
Короткоживущие токены
Серверы авторизации должны поощрять выдачу короткоживущих токенов, чтобы снизить риски при случайной утечке.
Гранулярная модель областей доступа
MCP поддерживает детальные scopes, чтобы клиент получал только необходимые права. Примеры областей:
- mcp:tools:weather
- mcp:resources:customer-data:read
- mcp:exec:workflows:*
Динамическая регистрация клиентов
Поддержка автоматической регистрации уменьшает ручную настройку и ускоряет безопасную интеграцию новых агентов и клиентов.
Практические заметки по внедрению
Реализация OAuth 2.1 для MCP серверов следует общим паттернам OAuth, но с обязательным применением перечисленных мер безопасности. В практических развертываниях стоит:
- Публиковать корректную метадату discovery для автоматического обнаружения клиентами
- Включать динамическую регистрацию по необходимости
- Принудительно применять PKCE для обмена кодов авторизации
- Строго валидировать redirect URI
- Выдавать короткоживущие токены и продумывать стратегию refresh токенов
- Логировать события авторизации и доступа для аудита
В спецификации MCP и сопутствующих материалах есть примеры и рекомендации. На практике один из подходов — создать простой сервис, например сервер анализа сентимента для финансовых данных, и использовать совместимый с OAuth 2.1 инструмент, такой как Scalekit, для обработки регистрации клиентов, выдачи и валидации токенов.