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

Auth — Google OAuth + JWT (+ Telegram login)

ПолеЗначення
ПровайдерВласна (NestJS) — без Auth0/Clerk/Supabase Auth (ADR-0010)
Стратегії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 (aiogram 3) є entry-point для auth з месенджера. Прив’язка акаунта йде через deep-link з одноразовим Redis-токеном (мінтить backend); сценарій ще не наскрізний — деталі в картці Telegram bot. Перевірка initData для Mini App робиться в API: HMAC-SHA256(data_check_string, secret), де secret = HMAC-SHA256(key="WebAppData", msg=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.