# Эндпоинт авторизации OAuth 2.0 (RFC 6749 §3.1, PKCE RFC 7636)

export default function Layout(props) {
  const { OpenAPIPage } = props.components ?? {};
  return (
    <>
      {props.children}
      ## Эндпоинт авторизации OAuth 2.0 (RFC 6749 §3.1, PKCE RFC 7636)

`GET /oauth/authorize`

**Авторизация:** dpop

**Параметры**

| Имя | Где | Обязательный | Тип | Описание |
| --- | --- | --- | --- | --- |
| `response_type` | query | да | "code" | Только authorization code flow |
| `client_id` | query | да | string | client_id зарегистрированного клиента |
| `redirect_uri` | query | да | string | Зарегистрированный redirect URI |
| `scope` | query | нет | string | Запрашиваемые scope через пробел |
| `state` | query | нет | string | Непрозрачное значение, возвращается в redirect |
| `nonce` | query | нет | string | Параметр nonce OIDC |
| `code_challenge` | query | да | string | PKCE challenge (обязателен) |
| `code_challenge_method` | query | нет | "S256" | Метод PKCE, только S256 |
| `dpop_jkt` | query | нет | string | Отпечаток DPoP-ключа для привязки токенов (RFC 9449 §10) |
| `resource` | query | нет | string | Целевой ресурс (RFC 8707) |

**Ответы**

- `302` — Перенаправление на redirect_uri с кодом
- `400` — Некорректный запрос (`application/json`, OAuthError)
- `401` — Токен отсутствует, недействителен или истёк (`application/problem+json`, ProblemDetails)
- `403` — Недостаточно прав или scope (`application/problem+json`, ProblemDetails)
- `429` — Превышен лимит запросов, повторите через Retry-After секунд (`application/problem+json`, ProblemDetails)

    </>
  );
}
