S60Auth
Vlastní OAuth2/OIDC identity provider — login, social login, JWT token issuance, lazy password migrace.
| Owner | auth (agent) |
| Status | running |
| Repo | studio60-cz/auth |
| Stack | NestJS + PostgreSQL + Redis + React (frontend) + @s60/auth-sdk |
| Catalog | catalog/services/s60auth.yaml |
URLs
| Env | URL | HC |
|---|---|---|
| dev | https://auth.s60dev.cz | /.well-known/openid-configuration |
| hub | https://auth.s60hub.cz | stejně |
| prod | https://auth.studio60.cz | stejně |
Komponenty
| Container | Port | Role |
|---|---|---|
s60-auth-backend |
3002 | NestJS API (OAuth2/OIDC provider) |
s60-auth-frontend |
3003 | React SPA (Nginx static serve) |
@s60/auth-sdk: sdílený package — JwtAuthGuard + Redis blacklist (každá app validuje JWT lokálně, bez ForwardAuth)
OAuth provider credentials
- Google OAuth:
/root/secrets/shared/google-oauth.env(sdílené napříč prostředími) - Facebook OAuth:
/root/secrets/shared/facebook-oauth.env
DB
| Env | DB | User | Server | Port |
|---|---|---|---|---|
| Hub | s60_auth_hub |
s60_auth_hub_user |
hub-alfa (pg-alfa) | 6432 |
| Prod | s60_auth_prod |
s60_auth_prod_user |
prod-alfa (pg-alfa) | 6432 |
| Dev | (cerebro pg-alfa) | — | cerebro | 6432 |
⚠️ Migrace na pg-alfa proběhla 2026-04-10 — staré usery s60_hub_user + s60_prod_user smazány, nahrazeny s60_auth_hub_user + s60_auth_prod_user.
Závislosti
- postgres-managed (pg-alfa, port 6432)
- redis (token cache + blacklist)
Klíčová architektonická rozhodnutí
ForwardAuth removed (2026-03-12)
- Před: Nginx ForwardAuth zavolal S60Auth, ten validoval token a vracel
x-user-id/x-user-emailheaders - Po: Každá aplikace si validuje JWT lokálně přes
@s60/auth-sdkJwtAuthGuard se sdílenýmJWT_SECRET+ Redis blacklist - Důvod: latence, single point of failure, headers manipulation risk
Lazy password migrace
- Stará hesla v BCrypt nebo SHA256
- Při úspěšném loginu se hash automaticky upgraduje na Argon2
- Až jednou bude vše migrováno, dropnou se stará pole
Social login
- Google + Facebook
- Auto-link by verified email (security: SSO provider must verify email)
Features (z catalog)
- OAuth2 / OpenID Connect provider
- Social login (Google, Facebook)
- Lazy password migrace (BCrypt/SHA256 → Argon2)
- JWT tokens (
userId,email, system roles) - Redis token cache (TTL synchronizovaný s JWT expiry)
QA users
QA user setup vyžaduje 3 kroky, ne jen registraci:
- Záznam v
users(registrace) - Záznam v
user_system_access(povolený přístup k systému) - Záznam v
user_system_roles(jinakrolesBySystemv JWT je prázdné → AuthGuard 401)
Pulse navíc potřebuje tier + credits v clients tabulce.
Detail: runbooks/qa-user-setup.md.
Secrets
/root/secrets/auth/.env.hub/root/secrets/auth/.env.prod
Poslední deploy
- 2026-08-01 — commit
cbffa6fhub (10:26 UTC) + prod (10:32 UTC) — REQ-054 fáze 1+2+3 (e-mailové aliasy, provisioning) + REQ-056 fáze 1 (merge identit) + REQ-053 error tracking + REQ-055/data-deletion/+ oprava mrtvého Turnstile tlačítka. Cíl = doc commitcbffa6f, ne kódový88fded1(ten má staleDEPLOY.mdse dvěma migracemi místo tří). - 3 migrace
1753…UserEmails+1754…UserExternalRefs+1755…IdentityMerge; pre-flight 0/0 na obou DB - backfill: hub 19/19, prod 388/388, žádný uživatel bez záznamu;
user_external_refsamerged_intoprázdné dle očekávání - build hash
e1aaa43cidentický hub↔prod; QA gate hub 4/4 (e2e login 20/20) - ⚠️ REQ-053 FE Sentry se NEZAPEKL —
docker-compose.yml(auth repo) nemá us60-auth-frontendsekciargs:, takžeVITE_SENTRY_DSN/VITE_SENTRY_ENVIRONMENTnedorazí do buildu, ačkoli jefrontend/Dockerfiledeklaruje. Ověřeno na served bundlu: Turnstile key ANO, Sentry DSN NE. Nahlášeno auth (T-20260801-098), oprava je na jejich straně. - ⚠️ Turnstile enforcement běží už od 31. 7. — tenhle deploy nebyl aktivace, ale oprava tlačítka; do té doby nemohl nikdo s blokovaným CF skriptem dokončit registraci
- 2026-05-22 15:30 UTC — commit
6c03148prod (skok z předch. prod commit; 4 specs REQ-039 + CR-002 + CR-003 + REQ-040; migrace1747800000000-AddVerificationAndLegalUrlsapplied id 5 — 3 columns nasystems: gdpr_url + terms_url (VARCHAR NULL) + email_verification_policy (VARCHAR NOT NULL DEFAULT 'none'); 15/15 prod systems default 'none' → zero breaking change; /api/health 200, openid issuer https://auth.studio60.cz, 0 ERROR post-deploy; pre-deploy backupauth-db/prod-pre-6c03148-20260522-152632.dump96 KB; hub re-deploy required pro refresh 2h validation window) - 2026-05-21 10:09 UTC — commit
6c03148hub (T-20260521-015 + T-20260521-022 DEPLOY.md fix; target17559b5+ DEPLOY.md update6c03148; 4 specs REQ-039 OAuth prompt + CR-002 email verify magic-link + CR-003 GDPR/Terms URL + REQ-040 verification policy; migrace1747800000000-AddVerificationAndLegalUrlsapplied; 12 hub systems default 'none')
Související
s60authsdk/—@s60/auth-sdkpackage detailsrunbooks/qa-user-setup.md