Перейти к основному содержимому
Версия: 2026.2.4

Анонимные

Раздел «Анонимные» — запросы, которые можно вызывать без авторизации: именно эти два метода стоят в начале пользовательского OAuth2/OIDC-потока, описанного в разделе «OAuth2». Для них не нужен заголовок Authorization.

Поток авторизации​

Эти запросы оборачивают стандартный OAuth2 Authorization Code Flow (см. «Общие ресурсы»), чтобы клиенту не нужно было вручную собирать URL авторизации и параметры обмена кода на токен:

1
Получить URL страницы входа

Клиент вызывает

GET /v1/anonymous/authorize-url

и получает готовый URL страницы входа.

2
Пользователь проходит аутентификацию

Клиент открывает этот URL в браузере или WebView пользователя. Пользователь проходит аутентификацию.

3
Redirect обратно с кодом

Сервер авторизации перенаправляет браузер обратно на redirectUri приложения с параметром ?code=... в query-строке.

4
Обменять код на токены

Клиент забирает этот code и вызывает

POST /v1/anonymous/auth

, передавая code и тот же redirectUri, что использовался на шаге 3 — сервис обменивает код на пару токенов.

5
Использовать accessToken

Полученный accessToken используется дальше как Authorization: Bearer <accessToken> во всех остальных запросах к Voice API (см. «Аутентификация»).

redirectUri должен совпадать байт в байт

Сервер авторизации сверяет redirectUri, переданный на шаге 4, с тем, что был использован при получении code на шаге 2–3 (это защита протокола OAuth2, а не особенность Voice). Если значения не совпадут хотя бы одним символом — обмен кода на токен завершится ошибкой. Храните redirectUri, с которым был инициирован конкретный вход, и переиспользуйте именно его.

Объект AuthResponse​

Пара токенов и сопутствующие метаданные сессии, которые сервер авторизации возвращает в ответ на обмен кода авторизации.

ПолеТипОписание
accessTokenstringAccess-токен (JWT) — используется как Bearer-токен во всех дальнейших запросах к Voice API.
tokenTypestringТип токена, обычно "Bearer".
expiresInintegerЧерез сколько секунд accessToken истечёт.
refreshTokenstringТокен обновления — используется для получения новой пары токенов без повторного прохождения интерактивного логина (см. «Обновить токен» в разделе «Пользователи»).
refreshExpiresInintegerЧерез сколько секунд истечёт refreshToken.
idTokenstringOIDC ID-токен (JWT) с данными о пользователе.
notBeforePolicyintegerМетка not-before policy — токены, выпущенные до этой метки, считаются недействительными.
sessionStatestringИдентификатор сессии, к которой привязана эта пара токенов.
scopestringСписок выданных OAuth2-областей действия (scopes), разделённых пробелом.

Объект ошибки​

При любой ошибке (в том числе просроченном или уже использованном code) вместо 200 OK возвращается default-ответ с тем же телом для обоих методов:

ПолеТипОписание
codeintegerЧисловой код ошибки (см. google.rpc.Code — тот же список, что используют gRPC-статусы остальных сервисов Voice).
messagestringЧеловекочитаемое описание ошибки.
detailsarrayДополнительные структурированные детали ошибки (google.protobuf.Any); в большинстве случаев пуст.
{
"code": 3,
"message": "authorization code is invalid or expired",
"details": []
}

Получить URL авторизации​

GET/v1/anonymous/authorize-url

Возвращает URL страницы входа, на который нужно перенаправить пользователя, чтобы начать Authorization Code Flow (шаг 1 из «Поток авторизации»). Параметров запроса нет — URL уже содержит все нужные client_id, redirect_uri по умолчанию, response_type и scope, настроенные на стороне Voice.

Ответ 200 OK​

ПолеТипОписание
urlstringПолный URL страницы авторизации, готовый к открытию в браузере пользователя.
{
"url": "https://auth.iopta.org/oauth2/authorize?client_id=voice-app&response_type=code&scope=openid&redirect_uri=https%3A%2F%2Fapp.iopta.org%2Fcallback"
}

Ответ default (ошибка)​

Стандартный объект ошибки.


Обменять код на токены​

POST/v1/anonymous/auth

Завершает Authorization Code Flow: обменивает одноразовый code, полученный после успешного входа пользователя, на пару access/refresh токенов (шаг 4 из «Поток авторизации»).

code одноразовый

Как и в стандартном OAuth2 Authorization Code Flow, code можно обменять на токены только один раз. Повторный вызов с уже использованным code вернёт ошибку — не ретрайте этот запрос вслепую при сетевом сбое, сначала проверьте, не прошёл ли предыдущий вызов на самом деле.

Тело запроса​

ПолеТипОписание
codestringКод авторизации из query-параметра code, с которым сервер авторизации перенаправил пользователя на redirectUri.
redirectUristringТот же redirect_uri, что был использован при получении code — значение должно совпадать байт в байт (см. предупреждение в разделе «Поток авторизации»).

{
"code": "4c7e1a1e-8f2b-4a3c-9d0e-2b6f5a9c1d34.session-state",
"redirectUri": "https://app.iopta.org/callback"
}

Ответ 200 OK​

Объект AuthResponse.

{
"accessToken": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ...",
"expiresIn": 300,
"refreshExpiresIn": 1800,
"refreshToken": "eyJhbGciOiJIUzUxMiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ...",
"tokenType": "Bearer",
"idToken": "eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJ...",
"notBeforePolicy": 0,
"sessionState": "3f1c9e2a-6b7d-4e5f-8a9b-1c2d3e4f5a6b",
"scope": "openid profile email"
}

Ответ default (ошибка)​

Стандартный объект ошибки — например, при истёкшем, уже использованном или синтаксически неверном code, либо при несовпадении redirectUri.