Перейти к содержимому
Выберите тему

Модель авторизации MCP

Как устроена авторизация MCP в редакции 2026-07-28 - роли OAuth 2.1, шаги получения токена, параметр resource, правила обращения с токенами, области доступа и коды ответов

описана редакция 2026-07-28, сверено со спецификацией 4 октября 2026

Источник - раздел Authorization спецификации.

Транспорт Что говорит спецификация
HTTP реализации следует соответствовать этому разделу
stdio этому разделу следовать не следует; учётные данные берутся из окружения
свой транспорт обязан следовать принятым правилам безопасности своего протокола

Сама авторизация для реализации MCP необязательна. Клиент и сервер могут договориться и о собственном способе.

Роль OAuth 2.1 Кто это в MCP Что делает
сервер ресурсов сервер MCP принимает запросы с токеном доступа и проверяет его
клиент клиент MCP получает токен и обращается к серверу от имени владельца ресурса
сервер авторизации отдельная служба общается с пользователем и выдаёт токены

Сервер авторизации может работать вместе с сервером MCP или быть отдельной системой. Как он устроен внутри, спецификация MCP не определяет.

Сервер авторизацииСервер MCPКлиент MCPСервер авторизацииСервер MCPКлиент MCPпользователь даёт согласие, PKCE, параметр resourceзапрос без токена401 и адрес метаданных ресурсаметаданные защищённого ресурсаметаданные сервера авторизациикод авторизацииобмен кода на токентокен доступазапрос с токеномответ

Спецификация берёт подмножество существующих стандартов. Это важно, чтобы не путать правило MCP с правилом OAuth.

Стандарт Для чего
OAuth 2.1 (черновик IETF draft-ietf-oauth-v2-1-13) основа: роли, выдача токенов, PKCE
RFC 9728 метаданные защищённого ресурса: как сервер MCP сообщает, где его сервер авторизации
RFC 8414 метаданные сервера авторизации
RFC 8707 параметр resource: для какого ресурса запрашивается токен
RFC 9207 параметр iss: какой сервер авторизации ответил
RFC 6750 передача токена в заголовке
RFC 7591 динамическая регистрация клиента (в MCP устарела)
Client ID Metadata Documents (черновик IETF) регистрация клиента по адресу документа

OAuth 2.1 и Client ID Metadata Documents на момент проверки - черновики IETF, а не утверждённые RFC. Спецификация MCP ссылается на конкретные их версии.

  1. Сервер авторизации обязан реализовать OAuth 2.1 с мерами защиты и для закрытых, и для открытых клиентов.
  2. Сервер MCP обязан реализовать метаданные защищённого ресурса по RFC 9728. Клиент обязан использовать их, чтобы найти сервер авторизации.
  3. Сервер авторизации обязан дать хотя бы один способ обнаружения: метаданные по RFC 8414 или OpenID Connect Discovery. Клиент обязан поддерживать оба.
  4. Клиент обязан получить идентификатор клиента одним из трёх способов до начала авторизации.
  5. Клиент обязан реализовать PKCE и убедиться по метаданным, что сервер авторизации его поддерживает.

Подробности первых трёх пунктов - на странице «Метаданные и обнаружение», четвёртого - на странице «Регистрация клиента».

Клиент обязан указывать, для какого сервера MCP ему нужен токен. Параметр resource:

  • обязан присутствовать и в запросе авторизации, и в запросе токена;
  • обязан называть сервер MCP, с которым клиент собирается работать;
  • обязан содержать канонический адрес сервера.
Адрес Годится
https://mcp.example.com/mcp да
https://mcp.example.com да
https://mcp.example.com:8443 да
mcp.example.com нет: не указана схема
https://mcp.example.com#fragment нет: есть фрагмент

Клиент отправляет параметр всегда, даже если сервер авторизации его не поддерживает.

Запрос с токеном
POST /mcp HTTP/1.1
Host: mcp.example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Кто Требование
клиент передаёт токен в заголовке Authorization в каждом запросе HTTP
клиент не помещает токен в строку запроса адреса
клиент не отправляет серверу MCP токены, выданные другим сервером авторизации
сервер MCP проверяет, что токен выдан именно для него
сервер MCP на недействительный или просроченный токен отвечает 401
сервер MCP не принимает и не передаёт дальше никакие другие токены

Последнее правило запрещает передачу токена насквозь. Если сервер MCP обращается к стороннему API, он действует там как отдельный клиент OAuth со своим токеном. Токен, полученный от клиента MCP, туда передавать нельзя.

Серверу MCP следует сообщать нужные области доступа в заголовке WWW-Authenticate.

Ответ 401 с подсказкой
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://mcp.example.com/.well-known/oauth-protected-resource",
scope="files:read"

Клиенту следует запрашивать только то, что нужно для работы:

  1. взять области из параметра scope ответа 401, если он есть;
  2. если его нет - взять scopes_supported из метаданных ресурса; если и его нет, не указывать scope совсем.

Если уже выданного токена не хватает для операции, серверу следует ответить 403 с error="insufficient_scope" и перечнем нужных областей. Клиенту, который действует от имени пользователя, следует запросить новый токен: объединить ранее запрошенные области с новыми, чтобы не потерять прежние права. Число повторов следует ограничивать.

Статус Когда
401 нужна авторизация или токен недействителен
403 областей доступа недостаточно
400 запрос авторизации составлен неверно

Серверу авторизации следует включать в ответ параметр iss по RFC 9207. Клиент до перехода обязан запомнить издателя из проверенных метаданных, а получив ответ - сверить.

Сервер объявил поддержку iss iss в ответе Действие клиента
да есть сравнить с запомненным издателем
да нет отклонить ответ
нет есть сравнить с запомненным издателем
нет нет продолжить

Сравнение - посимвольное, без приведения адресов к общему виду.

Клиент не должен рассчитывать, что получит токен обновления: это решает сервер авторизации. Полученный токен клиент обязан хранить и передавать защищённо. Серверу MCP не следует указывать offline_access среди требуемых областей.

Доступ без пользователя (OAuth Client Credentials) и корпоративное управление доступом (Enterprise-Managed Authorization) не входят в основную спецификацию. Это отдельные необязательные расширения.