Выдача access 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 записываются в claimscopesмассивом (см. раздел "Авторизация" выше). 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
Уникальный идентификатор для трассировки запроса. Не влияет на логику исполнения запроса.
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"}