PhoenixPass API

Выдача access token

POST
/oauth/v2/token

OAuth2 token endpoint. Мы сами выступаем OAuth2-провайдером для B2B-клиентов.

Поддерживаемые grant types:

  • client_credentials — основной сценарий: B2B-клиент обменивает client_id/client_secret своего Application на JWT. Может указать параметр запроса scope (пробел-разделённый список, как в OAuthTokenResponse.scope — стандартный OAuth2-формат); выдаётся пересечение запрошенных scope с allowed_scopes приложения. Если не указан — выдаются все allowed_scopes. Внутри выпущенного JWT эти scope записываются в claim scopes массивом (см. раздел "Авторизация" выше). Refresh token не выдаётся: клиент просто запрашивает новый токен.

  • authorization_code — вход сотрудника: обмен одноразового authorization code (полученного фронтом после редиректа из /api/v1/auth/yandex/callback) на наш внутренний JWT. Применяется PKCE: code_verifier обязателен и сверяется с code_challenge из /api/v1/auth/yandex/login.

    Backend сам обменивает code у Yandex IdP на opaque-токен и этим токеном сразу запрашивает userinfo; opaque-токен живёт только внутри этого вызова и наружу (в т.ч. фронту) не выдаётся никогда. По группам сотрудника из userinfo политика окружения (production/non-production) вычисляет роли, по ролям насыпаются admin-scopes (identity.*) — дальше сотрудник ходит в админ-методы с обычным JWT той же схемы Bearer. Нет ни одной роли — 403, токен не выдаётся.

Header Parameters

X-Request-ID?string

Уникальный идентификатор для трассировки запроса. Не влияет на логику исполнения запроса.

Request Body

application/x-www-form-urlencoded

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/oauth/v2/token" \  -H "Content-Type: application/x-www-form-urlencoded" \  -d 'grant_type=client_credentials&client_id=yandex_travel_app&client_secret=***&scope=esim%3Awrite+esim%3Aread+catalog.esim%3Aread'
{  "access_token": "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6IjIwMjYtMDEifQ...",  "token_type": "Bearer",  "expires_in": 3600,  "scope": "esim:write esim:read catalog.esim:read"}