Tapok Hosted и Tapok Connect

Выбор режима, границы данных и доступные разрешения.

Tapok Hosted и Tapok Connect

Оба режима используют единый unversioned API. Режим определяет backend Tapok:

client_id отсутствует       → Hosted
client_id зарегистрирован   → Connect
client_id неизвестен        → ошибка

Параметр mode, переданный клиентом, не является доверенным.

Tapok Hosted

Hosted работает без Client ID и API key. Новый popup API возвращает подписанный JWT и отдельный стабильный UID только для точного origin:

import { Tapok } from '@orria/tapok/browser'
const result = await new Tapok().login()
// result.user: { uid, isAdult }

Профиль, контакты, дата рождения и исходный идентификатор провайдера не передаются. isAdult может быть null. JWT живёт 10 минут и должен проверяться backend по JWKS с exact origin как audience. Подробности: Tapok Hosted.

Tapok Connect

Connect нужен, если приложение:

  • хранит данные в собственной БД;
  • использует собственный backend;
  • связывает действия с pairwise-пользователем;
  • получает разрешённые профильные данные.

Для Connect требуется зарегистрированное приложение или доступ Tapok. Интеграция использует:

  • публичный client_id для frontend;
  • API key только для backend.

API key запрещено размещать в browser JavaScript, query string, frontend/mobile bundle, публичном репозитории и логах.

Frontend

import { createTapokConnect } from '@orria/tapok/browser'

const tapok = createTapokConnect({
  clientId: 'tapok_…',
  redirectUri: `${location.origin}/auth/callback`,
  scopes: ['session', 'profile:display_name'],
})

await tapok.startSignIn()

Backend exchange

import { exchangeConnectCode } from '@orria/tapok/auth'

const token = await exchangeConnectCode({
  clientId,
  apiKey: process.env.TAPOK_API_KEY!,
  code,
  codeVerifier,
  redirectUri,
})

Connect возвращает pairwise ID, уникальный для приложения. Исходный sub Сбер ID наружу не передаётся.

Scopes Connect

Scope Результат
session Факт активной сессии
age:18 Только boolean признака 18+
profile:display_name Отображаемое имя
profile:name Компоненты ФИО
profile:birthdate Дата рождения
phone Номер телефона
vault:read Чтение Vault
vault:write Запись и удаление Vault

Приложение самостоятельно выбирает разрешения и получает выбранные данные после отдельного подтверждения пользователя. Один scope не включает другой.

Основные маршруты

POST /auth/requests
GET  /auth/authorize
POST /auth/token
GET  /auth/session
GET  /auth/userinfo
POST /auth/logout
POST /auth/revoke
GET  /auth/capabilities
GET|PUT|DELETE /vault/:namespace/:key

Connect token exchange вызывается только backend приложения.