# oauth-discovery

## Что такое OAuth Discovery?

**OAuth Discovery** — механизм автоматического обнаружения OAuth 2.0 Authorization Server через JSON-документ по адресу `/.well-known/oauth-authorization-server` (RFC 8414) или `/.well-known/openid-configuration` (OIDC). Содержит все нужные endpoints, чтобы агент мог инициировать OAuth flow без ручной настройки.

```json
{
  "issuer": "https://example.com",
  "authorization_endpoint": "https://example.com/oauth/authorize",
  "token_endpoint": "https://example.com/oauth/token",
  "jwks_uri": "https://example.com/.well-known/jwks.json",
  "scopes_supported": ["read", "write"],
  "response_types_supported": ["code"]
}
```

## Зачем нужен OAuth Discovery?

AI-агентам, которым нужен авторизованный доступ к API, необходимо найти OAuth Authorization Server. Без discovery агент требует явной конфигурации от пользователя — это блокирует автономную работу.

С OAuth Discovery агент:

1. Получает домен сервиса
2. Запрашивает `/.well-known/oauth-authorization-server` (или `/.well-known/openid-configuration`)
3. Читает `authorization_endpoint` и `token_endpoint`
4. Инициирует OAuth flow без участия человека

Особенно важно для [MCP-серверов](/glossary/mcp-server-card): спецификация MCP требует OAuth Discovery для авторизованных серверов.

## Как реализовать OAuth Discovery?

Большинство OAuth-провайдеров публикуют discovery автоматически:

| Провайдер | URL |
|-----------|-----|
| Auth0 | `https://<tenant>.auth0.com/.well-known/openid-configuration` |
| Keycloak | `https://<host>/realms/<realm>/.well-known/openid-configuration` |
| Okta | `https://<tenant>.okta.com/.well-known/oauth-authorization-server` |

Если используете собственный OAuth-сервер, опубликуйте JSON по `/.well-known/oauth-authorization-server`. Обязательные поля по RFC 8414:

- `issuer` — базовый URL вашего сервера
- `authorization_endpoint` — URL для авторизации
- `token_endpoint` — URL для получения токена
- `jwks_uri` — URL с публичными ключами

Для защищённых ресурсов дополните [OAuth Protected Resource Metadata](/glossary/oauth-protected-resource) (RFC 9728), указывающим на Authorization Server.

## Как мы проверяем OAuth Discovery?

Сканер проверяет два пути в порядке приоритета:

1. `/.well-known/openid-configuration`
2. `/.well-known/oauth-authorization-server`

Для каждого пути:

1. **HTTP 200** — документ доступен
2. **Валидный JSON** — тело парсится без ошибок
3. **Обязательные поля** — присутствуют `issuer`, `authorization_endpoint`, `token_endpoint`, `jwks_uri`

**pass** — хотя бы один путь вернул HTTP 200 с корректным JSON и всеми четырьмя полями. **fail** — ни один путь не отвечает или отсутствуют обязательные поля.

[← Все термины глоссария](/glossary)
