OAuth 2.0
Стандартный поток Authorization Code для сторонних сервисов. Secret обменивается только на сервере.
Поток авторизации
- Браузер пользователя → Authorize с
client_idиredirect_uri. - Пользователь входит и подтверждает доступ.
- Redirect на ваш
redirect_uriсcodeиstate. - Backend обменивает
codeнаaccess_token. - Запросы к API с
Authorization: Bearer ….
Authorize
GET /api/v1/oauth/authorize
https://id.miuone.kz/api/v1/oauth/authorize?
client_id=mio_pk_…&
redirect_uri=https://your-domain.com/oauth/callback&
response_type=code&
state=RANDOM_CSRF&
scope=profile
Откроется страница /authorize — «Разрешить доступ?». После подтверждения:
https://your-domain.com/oauth/callback?code=mio_ac_…&state=RANDOM_CSRF
Token
POST /api/v1/oauth/token
Только server-to-server. Basic Auth: base64(client_id:client_secret).
POST /api/v1/oauth/token
Authorization: Basic …
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code&
code=mio_ac_…&
redirect_uri=https://your-domain.com/oauth/callback
Ответ:
{
"access_token": "mio_at_…",
"token_type": "Bearer",
"expires_in": 7776000,
"scope": "profile"
}
code одноразовый, ~10 минут. redirect_uri при обмене должен совпадать с authorize.
Scopes
По умолчанию: profile email verified openid. Email передаётся только при необходимости и согласии пользователя.
Профиль
После получения токена — GET /api/v1/oauth/userinfo.
Native-приложения
Custom scheme redirect не поддерживается, если в заявке указан https-site_url. Используйте backend callback или Custom Tabs + HTTPS redirect.