Проверка на backend

Безопасный обмен Connect code и создание собственной сессии.

Проверка на backend

Hosted popup API возвращает короткоживущий JWT, который проверяется на backend. Connect использует отдельный backend exchange.

Hosted token

import { verifyHostedToken } from '@orria/tapok/server'

const verified = await verifyHostedToken(body.token, {
  baseUrl: 'https://tapok.orria.space',
  origin: 'https://app.example',
})

Передавайте origin из доверенной конфигурации, а не из body запроса. Helper проверяет ES256/JWKS, issuer, exact audience, exp/nbf, Hosted mode, формат UID, nullable is_adult и origin binding. Userinfo для Hosted отсутствует.

Обмен Connect code

Frontend передаёт вашему backend результат connect.finishSignIn():

{
  code,
  codeVerifier,
  redirectUri,
  clientId
}

Backend выполняет обмен:

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

const token = await exchangeConnectCode({
  baseUrl: 'https://tapok.orria.space',
  clientId: process.env.TAPOK_CLIENT_ID!,
  apiKey: process.env.TAPOK_API_KEY!,
  code: body.code,
  codeVerifier: body.codeVerifier,
  redirectUri: body.redirectUri,
})

Проверьте, что clientId и redirectUri совпадают с конфигурацией вашего backend, а не только со значениями запроса browser.

Сессия приложения

После успешного обмена:

  1. получите разрешённые данные через API Tapok;
  2. создайте собственную случайную server session;
  3. отправьте browser только HttpOnly, Secure, SameSite cookie;
  4. храните access token и API key только на backend;
  5. завершайте собственную сессию при logout/revoke.

API key

Храните ключ в secret manager или private environment variable. Никогда не включайте его:

  • в frontend или mobile bundle;
  • в query string;
  • в browser storage;
  • в публичные логи и сообщения об ошибках.