OAuth Защищённый Ресурс Метаданные
RFC 9728 protected-resource метаданные endpoint для MCP клиента обнаружения авторизации.
OAuth Protected Resource Metadata endpoint (RFC 9728) позволяет MCP клиентам обнаружить какой OAuth сервер авторизации защищает API AACWorkflow без требования предварительной конфигурации. Это позволяет seamless интеграцию с Claude, ChatGPT и другими MCP хостами.
Endpoint обнаружения
GET /.well-known/oauth-protected-resourceВозвращает:
{
"resource": "https://aacworkflow.example.com/mcp",
"authorization_servers": ["https://aacworkflow.example.com"],
"scopes_supported": [
"issues:read",
"issues:write",
"comments:read",
"comments:write",
"agents:read",
"agents:write",
"runtimes:read",
"autopilot:run",
"dashboard:read"
],
"bearer_methods_supported": ["header"]
}| Поле | Значение |
|---|---|
resource | MCP ресурс URL который защищен |
authorization_servers | Массив OAuth сервера авторизации URLs которые могут выдавать токены доступа для этого ресурса |
scopes_supported | Список scopes которые ресурс признаёт |
bearer_methods_supported | Как передаются токены (header = Authorization: Bearer <token>) |
WWW-Authenticate header обнаружение
Когда MCP клиент делает запрос к защищённому ресурсу без токена или с невалидным токеном, сервер отвечает 401 Unauthorized и включает WWW-Authenticate header:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://aacworkflow.example.com/.well-known/oauth-protected-resource"Этот header говорит клиенту: "Этот ресурс защищён OAuth. Получите метаданные по этому URL чтобы узнать как аутентифицироваться."
Клиент затем:
- Получает метаданные из URL в
resource_metadata - Читает
authorization_serversчтобы найти где регистрировать и получить токены - Завершает OAuth поток используя метаданные
- Повторяет запрос с новым access токеном
Поток: zero-configuration клиент
Клиент который знает только URL API AACWorkflow может bootstrappen авторизацию:
Клиент: GET /api/issues
(нет Authorization header)
Сервер: 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://aacworkflow.example.com/.well-known/oauth-protected-resource"
Клиент: GET /.well-known/oauth-protected-resource
Сервер: 200 OK
{
"authorization_servers": ["https://aacworkflow.example.com"],
"scopes_supported": ["issues:read", "issues:write", ...],
...
}
Клиент: Инициирует OAuth с https://aacworkflow.example.com
(обнаруживает AS метаданные из /.well-known/oauth-authorization-server)
Завершает auth-code + PKCE поток
Получает access токен
Клиент: GET /api/issues
Authorization: Bearer <access_token>
Сервер: 200 OK
[список issues]Соответствие RFC 9728
Метаданные endpoint соответствует RFC 9728 — OAuth 2.0 Protected Resource Metadata:
- Требуемые поля:
resource,authorization_servers,scopes_supported - Опциональные поля:
bearer_methods_supported(для ясности; используется только header) - Cache headers: ответы включают appropriate cache-control директивы
Интеграция с authorization-server метаданными
Protected-resource метаданные endpoint работает в тандеме с authorization server метаданные endpoint:
| Endpoint | RFC | Цель |
|---|---|---|
/.well-known/oauth-protected-resource | 9728 | Обнаружить AS защищающий ресурс |
/.well-known/oauth-authorization-server | 8414 | Обнаружить AS endpoints и возможности |
Полный bootstrap поток:
1. Попытайтесь получить доступ /api/issues → 401 + WWW-Authenticate header
2. Получите /.well-known/oauth-protected-resource → изучите AS URL
3. Получите /.well-known/oauth-authorization-server → изучите endpoints
4. Завершите OAuth поток на этих endpoints
5. Повторите с токеномUse cases
Claude (через MCP)
Claude плагин в Claude.ai или Claude Desktop:
- Пользователь предоставляет только AACWorkflow URL
- Claude получает protected-resource метаданные
- Claude представляет OAuth логин
- Пользователь авторизует; Claude получает токен
- Claude теперь может вызывать MCP инструменты от имени пользователя
ChatGPT
ChatGPT коннектор установка:
- Пользователь вводит AACWorkflow URL в настройках ChatGPT
- ChatGPT получает protected-resource метаданные чтобы обнаружить AS
- ChatGPT обрабатывает OAuth поток (пользователь видит логин)
- ChatGPT сохраняет токен безопасно
- ChatGPT может вызывать инструменты в следующих диалогах
Пользовательские MCP серверы
Пользовательский MCP сервер который обёртывает AACWorkflow:
- Читает protected-resource метаданные
- Проверяет что ресурс URL совпадает
- Проверяет что все требуемые scopes в
scopes_supported - Знает точно где отправлять OAuth запросы
Никакая ручная конфигурация OAuth сервера авторизации URLs не нужна. Клиенты читают её из метаданных.
Безопасность
- Метаданные public — не требует аутентификации
- Метаданные cacheable — CDN/browser кеширование в порядке
- Метаданные static — URL сервера авторизации не часто меняется
- Валидация токена всё ещё требует полные проверки scope и подписи; метаданные только для обнаружения