Authentication and sessions
- Passwords hashed with bcrypt (cost factor 12).
- Short JWT: 30-minute TTL, refresh via explicit login.
- Password policy: at least 10 characters; common passwords, sequences and passwords containing the email, name or company are refused; passwords are stored only as bcrypt hashes.
- 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.