Архитектура ядра
Масштабируемая система аутентификации должна быть stateless где это возможно, используя распределённые компоненты для поддержки горизонтального масштабирования. Система разделяет задачи на: регистрацию, аутентификацию, управление сессиями и MFA.
Безопасность пароля
Никогда не сохраняй пароли в открытом виде. Используй адаптивные алгоритмы хеширования:
bcrypt (cost factor 12+) или Argon2id (рекомендуется OWASP)
- Всегда применяй уникальную соль для каждого пользователя (встроена в bcrypt/Argon2)
- Пересчитывай хеш пароля при входе, если cost factor был повышен
Управление токенами
Используй JWT (JSON Web Tokens) для stateless аутентификации:
- Access tokens — короткоживущие (15 минут), подписаны RS256
- Refresh tokens — долгоживущие, хранятся в хранилище токенов на базе Redis для поддержки отзыва
- При выходе или компрометации немедленно инвалидируй refresh token в Redis
Многофакторная аутентификация (MFA)
- Поддерживай TOTP (например, Google Authenticator) согласно стандарту
otplib
- Предлагай SMS или email OTP как альтернативные варианты
- Состояние MFA проверяется после верификации основных учётных данных
Защита от brute-force атак
- Применяй rate limiting по IP и по имени пользователя с использованием счётчиков Redis
- Реализуй exponential backoff и временную блокировку учётной записи после повторных неудачных попыток
- Используй CAPTCHA после определённого порога неудачных попыток
OAuth и социальные входы
Интегрируй через Authorization Code Flow (OAuth 2.0 + OIDC):
- Обменивай код авторизации на токены на стороне сервера
- Привязывай идентификатор внешнего провайдера к внутренней учётной записи пользователя
- Храни токены провайдера безопасно, никогда не передавай их клиенту
Горизонтальное масштабирование
- Держи сервисы аутентификации stateless — всё состояние сессии хранится в Redis или распределённом кэше
- Используй менеджер секретов (например, AWS Secrets Manager) для ключей подписи
- Разворачивай за load balancer с отключенными sticky sessions