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 приложения.