OAuth для MCP.
Discovery, PKCE, токены и отзыв доступа.
Адреса этого стенда
- MCP resource:
https://context4.me/mcp. - Discovery ресурса.
- Discovery OAuth.
Полные адреса authorize, token, register и revoke берите из discovery этого стенда. Consent и provider authorization URLs возвращает сервер: не собирайте их вручную из примеров.
Публичные маршруты
| Метод и путь | Назначение | Вход и результат |
|---|---|---|
GET https://context4.me/.well-known/oauth-protected-resource/mcp | Discovery ресурса | Metadata с authorization server и MCP resource |
GET https://context4.me/.well-known/oauth-authorization-server | Discovery OAuth | Endpoint URLs, scope и поддерживаемые grants |
POST https://context4.me/oauth/register | Регистрация клиента | JSON с redirect URIs; client id, public client без секрета |
GET https://context4.me/oauth/authorize | Начало authorization code | Query client_id, redirect_uri, response_type=code, scope=mcp:tools, resource, code_challenge, code_challenge_method=S256, state; браузерный redirect |
GET https://context4.me/oauth/consent | Страница подтверждения | Продолжение браузерного consent в выбранном workspace |
POST https://context4.me/oauth/token | Code exchange и refresh | Form-urlencoded; токены и срок действия |
POST https://context4.me/oauth/revoke | Отзыв семейства токенов | Form-urlencoded token: access или refresh token |
POST https://context4.me/mcp, GET https://context4.me/mcp, DELETE https://context4.me/mcp | MCP resource | MCP messages и lifecycle, bearer access token |
Клиент строит URLs по discovery. Не придумывайте authorization URL из примера. Resource этого стенда — https://context4.me/mcp; для публичного клиента требуется доступный HTTPS. Public client использует token_endpoint_auth_method=none и PKCE S256.
Регистрация и redirect
Redirect URI должен точно совпадать с зарегистрированным. Разрешены HTTPS и callback на loopback native-клиента. Wildcard, fragment, credentials в URL и HTTP вне loopback отклоняются. Публичный MCP resource должен иметь стабильный HTTPS адрес.
Обмен кода
При grant_type=authorization_code нужны code, client_id, redirect_uri, code_verifier, resource. Code verifier — строка 43–128 символов. Код одноразовый, срок — пять минут. При grant_type=refresh_token нужны refresh_token, client_id, resource.
Access token непрозрачный, срок — 15 минут. Refresh token меняется при обновлении; срок family — 30 дней. Повтор использованного refresh token отзывает family. Храните свежий refresh token атомарно.
OAuth-ошибки используют {error, error_description}, а не общий Problem API; token-ответы не кэшируются. Ошибку consent или code exchange нельзя обходить повтором provider-записи.
Что разрешает grant
Grant даёт MCP-доступ к workspace, сохраняя действующие права и ограничения. Он не создаёт новый аккаунт провайдера. Существующее активное подключение может переиспользоваться; при нескольких агент просит выбрать.
Каждый OAuth MCP-запрос проверяет актуальное membership и workspace. Отзыв токена, удаление участника, изменение его membership epoch, архивирование workspace и истечение grant прекращают доступ. Отзыв MCP OAuth не равен отзыву provider credentials: раздел доступа.