1. Авторизация и QR-подписание
RSID docs
Russian
  • English
  • Russian
  • Uzbek
  • Обзор интеграции
  • Веб SDK
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание сессии
      POST
    • Получение данных пользователя
      GET
  • Мобильный SDK
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание сессии
      POST
    • Получение данных пользователя
      GET
  • Backend с данными
    • Руководство по интеграции
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Вариант 1 — сравнение фото с фото из паспорта
      POST
    • Вариант 2 — сравнение двух фото с данными гражданина
      POST
    • Вариант 3 — сравнение двух фото без данных гражданина
      POST
    • Получение результата
      GET
  • Backend без данных
    • Руководство по интеграции
    • Авторизация (sign-in)
    • Обновление токена (refresh)
    • Вариант 1 — сравнение фото с фото из паспорта
    • Вариант 2 — сравнение двух фото с данными гражданина
    • Вариант 3 — сравнение двух фото без данных гражданина
  • Авторизация и QR-подписание
    • Вход через RS-ID (OAuth2)
    • Подписание по QR-коду
    • Получение данных пользователя по коду
      POST
    • Авторизация (sign-in)
      POST
    • Обновление токена (refresh)
      POST
    • Создание QR-токена
      POST
    • Статус QR-токена по qr_id
      GET
    • Статус QR-токена по external_id
      GET
  • Schemas
    • ErrorResponse
    • AuthCodeRequest
    • ClientCredentials
    • Token
    • UserInfo
    • TokenResponseEnvelope
    • DocumentInfo
    • Signer
    • StringResponseEnvelope
    • ContactInfo
    • CallbackEvent
    • UserProfile
    • QrTokenCreateRequest
    • PhotoItem
    • Address
    • UserProfileResponseEnvelope
    • AdditionalParams
    • WebSessionCreateRequest
    • QrToken
    • UserProfileResponse
    • CompareFaceRequest
    • UserResponseEnvelope
    • CompareImagesWithInfoRequest
    • QrTokenResponseEnvelope
    • CompareImagesRequest
    • SignCallback
    • ComparisonResult
    • MobileSessionCreateRequest
    • ComparisonResultEnvelope
  1. Авторизация и QR-подписание

Вход через RS-ID (OAuth2)

1. Что такое вход через RS-ID#

Вход через RS-ID позволяет пользователям входить на ваш сайт через мобильное приложение RS-ID вместо пароля. Интеграция построена по стандартному протоколу OAuth 2.0 Authorization Code.
Ваш сайт направляет пользователя на страницу авторизации RS-ID. На странице отображается QR-код; пользователь сканирует его в мобильном приложении RS-ID и подтверждает личность по лицу. Затем RS-ID возвращает пользователя на ваш сайт с одноразовым кодом авторизации, а ваш бэкенд обменивает этот код на подтверждённый профиль пользователя.
Вам не нужно работать с паролями, вводом паспортных данных или проверкой лица — это делает RS-ID, а ваш бэкенд получает подтверждённую личность.

Сценарии использования#

СценарийПример
Вход без пароляПользователи входят на ваш веб-портал, сканируя QR-код в приложении RS-ID.
Подтверждённая регистрацияНовый пользователь регистрируется в один шаг; аккаунт создаётся с подтверждёнными ФИО, ПИНФЛ и данными документа.
Вход в чувствительные сервисыБанковские, страховые, государственные или медицинские порталы, где при каждом входе нужен реальный подтверждённый человек.
Единая личность для нескольких сервисовОдна и та же личность RS-ID используется для входа в несколько ваших продуктов.

2. Терминология#

ТерминКто / что это
КлиентКомпания, которая интегрирует RS-ID (вы). Зарегистрирована в RS-ID как проект типа AUTH и получила client_id / client_secret и зарегистрированный redirect_uri. Включает фронтенд клиента (ваш сайт) и бэкенд клиента.
ПользовательЧеловек, который входит, — ваш клиент, у которого есть мобильное приложение RS-ID.
Страница авторизации RS-IDВеб-страница RS-ID, на которой пользователь сканирует QR-код.
Мобильное приложение RS-IDПриложение RS-ID на телефоне пользователя, через которое он сканирует QR-код и подтверждает личность.
СерверСервер RS-ID, который выдаёт коды авторизации и возвращает профиль пользователя.
Код авторизации (code)Одноразовый код, который RS-ID отправляет на ваш redirect_uri после входа пользователя. Действует 5 минут, используется один раз.
redirect_uriURL на вашем сайте, куда RS-ID возвращает пользователя с code. Должен быть зарегистрирован в RS-ID.
stateСлучайное значение, которое ваш сайт генерирует для каждого входа и проверяет при возврате, — защита от CSRF.
ПИНФЛПерсональный идентификационный номер физического лица — 14 цифр.

3. Как это работает#

1.
Пользователь нажимает Войти через RS-ID на вашем сайте.
2.
Ваш сайт перенаправляет пользователя на страницу авторизации RS-ID с параметрами client_id, redirect_uri, response_type=code и state (7.1).
3.
Страница авторизации показывает QR-код, который обновляется каждые 30 секунд (7.2).
4.
Пользователь сканирует QR-код в мобильном приложении RS-ID и подтверждает личность.
5.
Страница авторизации перенаправляет пользователя на ваш redirect_uri с code и state (7.3).
6.
Ваш бэкенд проверяет state и обменивает code на профиль пользователя через POST /v1/user/by-code (7.4).
7.
Вы выполняете вход пользователя в свою систему.

4. Схема интеграции#

integration-flow-oauth2.png

5. Окружения#

ОкружениеСтраница авторизации RS-IDБазовый URL API
Stage (тестовое)https://auth.stage.rsid.uzhttps://sdk.stage.rsid.uz/web/api
Productionhttps://auth.rsid.uzhttps://sdk.rsid.uz/web/api
Для stage и production используются разные client_id / client_secret. redirect_uri регистрируется отдельно для каждого окружения.

6. Общие правила#

Формат ответа#

Все ответы API имеют одинаковую структуру:
{ "data": { }, "code": 0, "message": "Success" }
ПолеТипОписание
codeinteger0 — успех. Любое другое значение — ошибка (см. таблицы ошибок). Всегда проверяйте code, а не только HTTP-статус.
messagestringТекст на языке запроса (uz / ru / en). Не разбирайте его программно.
dataanyДанные ответа. Отсутствует при ошибке.

Безопасность#

client_secret хранится только на вашем бэкенде. Никогда не передавайте его в браузер или мобильное приложение. Обменивайте code только с бэкенда.
Всегда используйте и проверяйте state. Генерируйте новый случайный state для каждого входа, сохраняйте его в сессии пользователя и отклоняйте возврат, если значение не совпадает.
Код одноразовый и короткоживущий. Обменивайте его сразу — он действует 5 минут и используется только один раз.
Используйте HTTPS для redirect_uri.

7. Описание API#

7.1 Перенаправление пользователя на страницу авторизации RS-ID#

Ваш сайт направляет браузер пользователя на страницу авторизации RS-ID.
Метод - GET (перенаправление браузера)
URL - {auth_page_url}/
Query-параметры
ПолеТипОбязательноДлина / форматОписание
client_idstringДа—Ваш client_id, выданный RS-ID.
redirect_uristringДаURL, в URL-кодировкеКуда RS-ID вернёт пользователя. Должен точно совпадать с redirect_uri, зарегистрированным в RS-ID.
response_typestringДаcodeВсегда code (authorization code flow).
statestringРекомендуетсяСлучайная строкаСлучайное значение, сгенерированное вашим сайтом для этого входа. Возвращается без изменений вместе с кодом.
Пример
https://auth.rsid.uz/?client_id=shop-example-auth&redirect_uri=https%3A%2F%2Fshop.example.uz%2Fauth%2Frsid%2Fcallback&response_type=code&state=Zx81kQ2mP0

7.2 Действия пользователя на странице авторизации RS-ID#

1.
Страница авторизации показывает QR-код. В целях безопасности QR-код генерируется заново каждые 30 секунд — старый QR-код использовать нельзя.
2.
Пользователь открывает мобильное приложение RS-ID и сканирует QR-код.
3.
Пользователь подтверждает личность в приложении (проверка по лицу).
4.
После успешной идентификации страница авторизации возвращает пользователя на ваш сайт (7.3).
Если пользователь закрыл страницу или не успел отсканировать код, на ваш сайт ничего не отправляется; пользователь может начать заново с 7.1.

7.3 Возврат на ваш сайт с кодом#

После успешного входа страница авторизации RS-ID перенаправляет браузер пользователя на ваш redirect_uri:
https://shop.example.uz/auth/rsid/callback?code=Zx81kQ2mP0aB7cD9eF1gH3&state=Zx81kQ2mP0
ПараметрОписание
codeОдноразовый код авторизации. Действует 5 минут, используется один раз.
stateЗначение, которое вы отправили в 7.1. Сравните его с сохранённым в сессии пользователя; если не совпадает — прервите вход.
Ваша callback-страница передаёт code (и state) вашему бэкенду, который вызывает 7.4.

7.4 Получение данных пользователя по коду#

Бэкенд клиента обменивает код авторизации на подтверждённый профиль пользователя.
Метод - POST
Endpoint - {base_url}/v1/user/by-code — без заголовка Authorization
Content-Type (заголовок) - application/json

Тело запроса
ПолеТипОбязательноДлина / форматОписание
client_idstringДаНе пустоеВаш client_id (проект AUTH).
client_secretstringДаНе пустоеВаш client_secret.
codestringДаНе пустоеcode из 7.3.
grant_typestringДаauthorization_codeВсегда authorization_code.
{
  "client_id": "shop-example-auth",
  "client_secret": "s3cr3t-value",
  "code": "Zx81kQ2mP0aB7cD9eF1gH3",
  "grant_type": "authorization_code"
}
Ответ
ПолеТипОписание
data.user_info.first_namestringИмя.
data.user_info.last_namestringФамилия.
data.user_info.middle_namestringОтчество. -, если его нет.
data.user_info.pinflstringПИНФЛ, 14 цифр. Используйте его как постоянный идентификатор пользователя.
data.user_info.genderstringПол.
data.user_info.birth_datestringyyyy-MM-dd.
data.user_info.birth_placestringМесто рождения.
data.document_info.documentstringСерия и номер документа.
data.document_info.typestringТип документа.
data.document_info.issued_bystringКем выдан.
data.document_info.issued_atstringДата выдачи, yyyy-MM-dd.
data.document_info.expiry_atstringСрок действия, yyyy-MM-dd.
data.contact_info.phonestringНомер телефона из аккаунта RS-ID.
data.contact_info.emailstringEmail из аккаунта RS-ID, если указан.
data.permanent_addressobjectВ этом сценарии не возвращается (null).
data.temporary_addressobjectВ этом сценарии не возвращается (null).
codeinteger0 при успехе.
messagestringТекст результата.
{
  "data": {
    "user_info": {
      "first_name": "ALISHER",
      "last_name": "KARIMOV",
      "middle_name": "BAXTIYOROVICH",
      "pinfl": "12345678901234",
      "gender": "MALE",
      "birth_date": "1990-01-01",
      "birth_place": "TOSHKENT",
      "birth_country": null,
      "nationality": null,
      "citizenship": null
    },
    "document_info": {
      "document": "AA1234567",
      "type": "PASSPORT",
      "issued_by": "IIV 26283",
      "issued_at": "2018-05-10",
      "expiry_at": "2028-05-09"
    },
    "contact_info": {
      "phone": "998901234567",
      "email": "alisher.karimov@example.uz"
    },
    "permanent_address": null,
    "temporary_address": null
  },
  "code": 0,
  "message": "Success"
}
Ошибки
КодПричина
-1083client_id не найден.
-1002Клиент не является проектом AUTH.
-1089grant_type не равен authorization_code.
-1018code недействителен, истёк (старше 5 минут) или уже использован, либо неверный client_secret. Начните вход заново с 7.1.
-1035code не связан со входом. Начните вход заново с 7.1.
400Не заполнено обязательное поле.

8. Коды ошибок#

КодНазваниеЗначение
0SUCCESSУспех.
-9SYSTEM_ERRORНепредвиденная ошибка сервера.
-1002CLIENT_NOT_PERMITTEDКлиент не является проектом AUTH.
-1018USER_NOT_FOUNDКод недействителен, истёк или уже использован, либо неверные учётные данные.
-1035INVALID_QR_TOKENКод не связан со входом.
-1083CLIENT_PROJECT_NOT_FOUNDclient_id не найден.
-1089INVALID_GRAND_TYPEgrant_type не равен authorization_code.
Modified at 2026-11-10 07:05:40
Previous
Вариант 3 — сравнение двух фото без данных гражданина
Next
Подписание по QR-коду
Built with