Проверка на 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.
Сессия приложения
После успешного обмена:
- получите разрешённые данные через API Tapok;
- создайте собственную случайную server session;
- отправьте browser только HttpOnly, Secure, SameSite cookie;
- храните access token и API key только на backend;
- завершайте собственную сессию при logout/revoke.
API key
Храните ключ в secret manager или private environment variable. Никогда не включайте его:
- в frontend или mobile bundle;
- в query string;
- в browser storage;
- в публичные логи и сообщения об ошибках.