Authentifizierung
Authentifizierung
Abschnitt betitelt „Authentifizierung“Login-Flow
Abschnitt betitelt „Login-Flow“- User gibt E-Mail + Passwort ein
- Backend sucht Account ueber
email_relation(type:account_primary) →email→account - Passwort-Pruefung per bcrypt
- Rate-Limiting: Max 5 fehlgeschlagene Versuche pro 15 Minuten (getrackt in
login_attempt) - Bei bekanntem Geraet (Device-Cookie vorhanden + in
known_deviceTabelle): Session wird direkt erstellt - Bei unbekanntem Geraet: 2FA-Code per E-Mail,
attempt_idzurueck an Frontend
Zwei-Faktor-Authentifizierung (2FA)
Abschnitt betitelt „Zwei-Faktor-Authentifizierung (2FA)“- Typ: E-Mail-basiert (6-stelliger kryptographisch zufaelliger Code)
- Gueltigkeit: 30 Minuten
- Ausloeser: Login von unbekanntem Geraet ODER
twofactor_emailFlag am Account - Nach erfolgreicher Verifikation: Session + Device-Token erstellt
Device-Erkennung
Abschnitt betitelt „Device-Erkennung“known_deviceTabelle speichert bekannte Geraete pro Account- Device-Cookie: 30 Tage, HttpOnly, Secure, SameSite=Lax
- Bei bekanntem Device: 2FA wird uebersprungen
- Remote-Logout-Mechanismus: Device aus DB loeschen → naechster Request schlaegt fehl
Sessions
Abschnitt betitelt „Sessions“- Dauer: 30 Tage (Cookie + DB-Eintrag)
- Cookie: HttpOnly, Secure, SameSite=Lax
- Terminierung:
terminated_atTimestamp in DB - Session-Check:
GET /api/public/auth/sessionvalidiert Cookie gegen DB - Logout:
POST /api/protected/auth/logoutsetztterminated_at
Implementierte Endpoints
Abschnitt betitelt „Implementierte Endpoints“| Methode | Pfad | Auth | Beschreibung |
|---|---|---|---|
| POST | /api/public/auth/login | — | Login (→ session_id oder attempt_id) |
| POST | /api/public/auth/verify-2fa | — | 2FA-Code pruefen (→ session_id + device_token) |
| GET | /api/public/auth/session | — | Session validieren |
| POST | /api/protected/auth/logout | Session | Session terminieren |
Code-Struktur
Abschnitt betitelt „Code-Struktur“internal/feature/auth/├── usecase.go # Login, Verify2FA, SessionCheck, Logout, KnownDeviceExists├── request.go # Request/Response Structs├── repository.go # Interfaces (Account, Session, LoginAttempt, KnownDevice)├── jet_repository.go # Jet-Implementierungen├── password.go # bcrypt Helpers└── errors.go # ErrInvalidCredentials, ErrAccountInactive, ErrTooManyAttempts, etc.