Перейти до вмісту

Auth — Google OAuth + JWT (+ Telegram login)

ПолеЗначення
ПровайдерВласна (NestJS) — без Auth0/Clerk/Supabase Auth
СтратегіїGoogle OAuth · Telegram login (через бот) · JWT access + refresh
Бібліотеки@nestjs/jwt · @nestjs/passport · passport-google-oauth20 (TODO: підтвердити)
Хто використовуєfrontends + backends обох продуктів
Хто видає JWTAbitly API (single source of truth)
ТокенTTL (SSM)Призначення
Access JWTACCESS_JWT_TTLосновний (cookies / Authorization header)
Refresh JWTREFRESH_JWT_TTLоновлення access
Temp JWTJWT_TEMP_TTLпере-авторизація, OTP-сценарії

Секрети: ACCESS_JWT_SECRET, REFRESH_JWT_SECRET, JWT_TEMP_SECRET — SSM SecureString.

КлючЗначення
GOOGLE_CLIENT_IDOAuth Client ID (з Google Cloud Console)
GOOGLE_CLIENT_SECRETOAuth Client Secret
GOOGLE_REDIRECT_URIcallback URL (per environment)

Sequence → data-flows#автентифікація.

Telegram bot (Telegraf) є entry-point для auth з месенджера. Перевірка initData для Mini App робиться в API: HMAC-SHA256(initData, secret = SHA256("WebAppData" + bot_token)).

Studsearch backend має своє JWT (SSM /studsearch/prod/session/ttl) — для UGC-користувачів (студенти-інсайдери). Окремий identity-domain від Abitly. Якщо в майбутньому буде SSO — потребує окремого рішення.

  • Користувача розлогінює → перевір TTL та зсув часу серверу.
  • Google OAuth callback падаєredirect_uri_mismatch — звір GOOGLE_REDIRECT_URI у SSM і Google Console.
  • Mini App init data invalidTELEGRAM_BOT_TOKEN різниться між ботом і API (token rotation?).
  • CORS на frontend → перевірити ALLOWED_METHODS SSM в API.