Developers OAuth 2.0

OAuth 2.0

Стандартный поток Authorization Code для сторонних сервисов. Secret обменивается только на сервере.

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

  1. Браузер пользователя → Authorize с client_id и redirect_uri.
  2. Пользователь входит и подтверждает доступ.
  3. Redirect на ваш redirect_uri с code и state.
  4. Backend обменивает code на access_token.
  5. Запросы к 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.