Authentication and sessions
- Passwords hashed with bcrypt (cost factor 12).
- Short JWT: 30-minute TTL, refresh via explicit login.
- Password policy: minimum 12 characters, breached-password list check.
- Password reset via signed token with rate limiting and enumeration protection (generic response for unknown emails).
- GDPR self-service export (Art. 20) available from the user profile.