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 обох продуктів |
| Хто видає JWT | Abitly API (single source of truth) |
Токени
Section titled “Токени”| Токен | TTL (SSM) | Призначення |
|---|---|---|
| Access JWT | ACCESS_JWT_TTL | основний (cookies / Authorization header) |
| Refresh JWT | REFRESH_JWT_TTL | оновлення access |
| Temp JWT | JWT_TEMP_TTL | пере-авторизація, OTP-сценарії |
Секрети: ACCESS_JWT_SECRET, REFRESH_JWT_SECRET, JWT_TEMP_SECRET — SSM SecureString.
Google OAuth
Section titled “Google OAuth”| Ключ | Значення |
|---|---|
GOOGLE_CLIENT_ID | OAuth Client ID (з Google Cloud Console) |
GOOGLE_CLIENT_SECRET | OAuth Client Secret |
GOOGLE_REDIRECT_URI | callback URL (per environment) |
Sequence → data-flows#автентифікація.
Telegram login
Section titled “Telegram login”Telegram bot (Telegraf) є entry-point для auth з месенджера. Перевірка initData для Mini App робиться в API: HMAC-SHA256(initData, secret = SHA256("WebAppData" + bot_token)).
Cross-product
Section titled “Cross-product”Studsearch backend має своє JWT (SSM /studsearch/prod/session/ttl) — для UGC-користувачів (студенти-інсайдери). Окремий identity-domain від Abitly. Якщо в майбутньому буде SSO — потребує окремого рішення.
Типові проблеми
Section titled “Типові проблеми”- Користувача розлогінює → перевір TTL та зсув часу серверу.
- Google OAuth callback падає →
redirect_uri_mismatch— звірGOOGLE_REDIRECT_URIу SSM і Google Console. - Mini App init data invalid →
TELEGRAM_BOT_TOKENрізниться між ботом і API (token rotation?). - CORS на frontend → перевірити
ALLOWED_METHODSSSM в API.