> ## Documentation Index
> Fetch the complete documentation index at: https://developer.every.ru/llms.txt
> Use this file to discover all available pages before exploring further.

# Авторизация

API использует двухуровневую модель безопасности: **Mutual TLS (mTLS)** для аутентификации и **OAuth 2.0 Bearer токены** для авторизации.

## Двухуровневая модель безопасности

### Уровень 1: Mutual TLS (mTLS) — Аутентификация

Все запросы к API требуют валидного клиентского сертификата для mTLS аутентификации. Сертификат необходимо получить у инфраструктурной команды, указав информацию о вашем приложении.

### Уровень 2: Bearer токен — Авторизация

В дополнение к mTLS, все запросы должны содержать валидный Bearer токен в заголовке `Authorization`:

```http theme={null}
Authorization: Bearer <token>
```

Bearer токен определяет, какие операции может выполнять клиент (через scopes).

## Получение токена

Токен получается через OAuth 2.0 endpoint с использованием стандартного Client Credentials flow. Для получения токена используются `client_id` и `client_secret` (mTLS не требуется для этого запроса).

**Endpoint:** `https://auth.every.ru/oauth/v2/token`

**Метод:** `POST`

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

* `grant_type=client_credentials` (обязательно)
* `client_id` — идентификатор клиента (обязательно)
* `client_secret` — секрет клиента (обязательно)
* `scope` — список необходимых scope, разделённых пробелом (обязательно)

**Пример запроса:**

```bash theme={null}
curl -X POST https://auth.every.ru/oauth/v2/token \
  -u "client_id:client_secret" \
  -d "grant_type=client_credentials" \
  -d "scope=catalog.lounges booking.lounges"
```

**Пример ответа:**

```json theme={null}
{
  "access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}
```

## Scopes

API использует следующие scopes для контроля доступа:

* `catalog.lounges` — доступ к получению информации о бизнес-залах
* `catalog.fast_tracks` — доступ к получению информации о фаст-треках
* `booking.lounges` — доступ к бронированию бизнес-залов
* `booking.fast_tracks` — доступ к бронированию фаст-треков

Каждая операция требует соответствующий scope. Например, для создания бронирования бизнес-зала требуется scope `booking.lounges`.

## Время жизни токена

Токен действителен в течение **1 часа** (3600 секунд) с момента выдачи. После истечения срока действия необходимо получить новый токен.

## Формат токена

Токен представляет собой JWT (JSON Web Token) в формате `{header}.{payload}.{signature}`.

## Обработка ошибок

При ошибках аутентификации API возвращает:

* **401 Unauthorized** — если отсутствует или недействителен клиентский сертификат или Bearer токен
* **403 Forbidden** — если токен валиден, но отсутствует необходимый scope или неверный audience

Подробнее см. [документацию по ошибкам](./errors.mdx).

## Рекомендации

1. **Кэшируйте токены**: Сохраняйте токен и время его получения, чтобы не запрашивать новый токен при каждом запросе
2. **Обновляйте токены заранее**: Обновляйте токен за несколько минут до истечения срока действия
3. **Используйте минимальные scopes**: Запрашивайте только те scopes, которые действительно необходимы для вашего приложения
4. **Безопасное хранение**: Храните клиентские сертификаты, client\_id/client\_secret и токены в безопасном месте (не в коде)
5. **Разделяйте endpoints**: Endpoint для получения токена (`/oauth/v2/token`) не требует mTLS, а endpoint API (`/api/v2/*`) требует mTLS
