Как это работает

Флоу аутентификации Paspo ID шаг за шагом.

Интеграция сводится к одному вызову на клиенте — authenticate(scope, nonce) — который возвращает одноразовый код авторизации. Ваше приложение передаёт этот код на сервер, а тот обменивает его у Paspo ID на данные пользователя.

Весь обмен между приложением и Paspo ID защищён end-to-end шифрованием (ECDH P-256 + AES-256-GCM, эфемерные ключи хранятся только в памяти) и полностью выполняется SDK — криптографические операции с вашей стороны не требуются.

sequenceDiagram
    participant B as Ваш сервер
    participant A as Ваше приложение (SDK)
    participant P as Приложение Paspo ID
    participant PS as Сервер Paspo ID

    A->>B: запрос nonce
    B-->>A: nonce
    A->>P: authenticate(scope, nonce)
    Note over A,P: эфемерный ключ ECDH, end-to-end шифрование
    P->>PS: проверка подписи и package приложения
    Note over P: экран согласия пользователя
    P-->>A: зашифрованный ответ
    Note over A: расшифровка -> Success(authCode)
    A->>B: authCode
    B->>PS: обмен authCode (server-to-server)
    PS-->>B: данные профиля пользователя
  1. Ваш сервер генерирует nonce и передаёт его приложению.
  2. Ваше приложение вызывает authenticate(scope, nonce). SDK генерирует эфемерную пару ключей ECDH и открывает приложение Paspo ID.
  3. Paspo ID проверяет подпись и package вашего приложения, затем показывает пользователю экран согласия с запрошенным scope.
  4. После подтверждения Paspo ID возвращает зашифрованный ответ; SDK расшифровывает его и возвращает одноразовый authCode.
  5. Ваше приложение отправляет authCode на сервер, который обменивает его — напрямую, сервер-сервер — у Paspo ID на подтверждённые данные профиля пользователя.

Что всегда остаётся на вашем сервере

Это нельзя перенести на клиент — именно это делает поток безопасным:

  • Генерация nonce. Свежий непредсказуемый nonce на каждую попытку — защита от replay-атак.
  • Обмен кода авторизации. authCode одноразовый и сам по себе не содержит персональных данных; данные пользователя передаются только по вашему защищённому каналу сервер-сервер.

Если Paspo ID не установлен

SDK обнаруживает это, сохраняет nonce, открывает страницу приложения/Play Store для Paspo ID и возвращает результат NotInstalled вместо исключения. После установки Paspo ID и повторного вызова сохранённый nonce передаётся для атрибуции установки. Точный тип результата — в справочнике Android.

Что вы получаете в ответ

Ваш сервер получает только те поля профиля, которые вы запросили в scope — номер телефона, e-mail, национальное удостоверение или постоянный Paspo ID пользователя, — но никогда не сырые биометрические данные. Сопоставление Face ID и Voice ID происходит полностью на устройстве, внутри приложения Paspo ID.