Выбор метода аутентификации — одно из первых архитектурных решений при создании любого веб-сервиса. Ошибка здесь стоит дорого: утечки данных, потеря доверия, регуляторные штрафы. Разбираем все варианты и когда что выбрать.
Основные методы аутентификации для веба
1. Логин и пароль (Password-based)
Классика жанра. Пользователь создаёт пароль при регистрации, сервер хранит его хеш (bcrypt, Argon2). При входе — сравнение хешей.
Плюсы: привычно, просто реализовать.
Минусы: пользователи забывают пароли, используют слабые, применяют одинаковые на разных сайтах. По статистике HaveIBeenPwned — более 10 млрд пар логин/пароль находятся в открытом доступе.
2. OAuth 2.0 / Вход через соцсети
Пользователь авторизуется через сторонний провайдер (VK, Google, Яндекс, Apple). Ваш сервис получает токен и базовые данные профиля.
Плюсы: не нужно хранить пароли, высокая конверсия при регистрации, провайдер берёт на себя безопасность.
Минусы: зависимость от стороннего сервиса, ограниченный контроль над данными.
3. SMS/Email OTP (Magic Link)
Пользователь вводит только номер телефона или email — ему приходит одноразовый код или ссылка. Никакого пароля.
Плюсы: нет проблемы слабых паролей, нет утечки хешей, удобно для мобильной аудитории.
Минусы: зависимость от доставки SMS/email, дополнительные затраты на OTP.
4. SSO (Single Sign-On)
Корпоративный стандарт: один аккаунт (LDAP, Active Directory, Okta) даёт доступ ко всем внутренним системам. Протоколы: SAML 2.0, OpenID Connect.
Плюсы: один пароль для всего, централизованное управление доступом, мгновенный отзыв прав.
Минусы: сложность настройки, дорогое ПО для корпоративного SSO.
5. Passkeys (FIDO2/WebAuthn)
Новейший стандарт. Пользователь использует биометрию (Face ID, Touch ID) или ключ безопасности вместо пароля. Поддерживается всеми современными браузерами.
Плюсы: максимальная защита от фишинга, нет паролей вообще.
Минусы: новая технология, не все пользователи готовы, нужен фоллбэк.
Сравнение методов аутентификации
| Метод | Надёжность | UX | Стоимость | Подходит для |
|---|---|---|---|---|
| Пароль | ★★☆☆☆ | ★★★★☆ | Минимальная | Любых сервисов (базовый) |
| Пароль + SMS 2FA | ★★★★☆ | ★★★☆☆ | Низкая | Финтех, e-commerce |
| OAuth | ★★★☆☆ | ★★★★★ | Бесплатно | SaaS, соцсети, стартапы |
| SMS Magic Link | ★★★☆☆ | ★★★★☆ | Низкая | Мобильные сервисы |
| SSO | ★★★★☆ | ★★★★★ | Высокая | Корпоративные системы |
| Passkeys | ★★★★★ | ★★★★☆ | Низкая | Современные сервисы |
10 лучших практик при реализации аутентификации
- Никогда не храните пароли в открытом виде — только хеши Argon2id или bcrypt (cost ≥ 12)
- Используйте HTTPS везде — HTTP-аутентификация бессмысленна
- Внедрите rate limiting — не более 5–10 попыток входа в минуту с одного IP
- Добавьте второй фактор для высокорисковых действий — смена пароля, вывод средств
- Используйте токены с коротким TTL — access token 15–60 минут, refresh token 30 дней
- Логируйте неудачные попытки входа — для мониторинга и алертов
- Проверяйте пароли по утечкам — интегрируйте Have I Been Pwned API при регистрации
- Предложите управление сессиями — пользователь должен видеть активные устройства и завершать их
- Верифицируйте email/телефон при регистрации — это фундамент для восстановления доступа
- Планируйте сценарий потери второго фактора — резервные коды, альтернативный канал
Частые ошибки разработчиков
- MD5 и SHA-1 для хеширования паролей — устарели, взламываются за секунды
- Отсутствие CSRF-токенов в формах входа
- Раскрытие информации «пользователь не найден» vs «неверный пароль» — оба варианта должны давать одинаковое сообщение
- Сессионные куки без флагов HttpOnly и Secure
- Отсутствие инвалидации сессий при смене пароля
Итог
Нет единого правильного метода — есть соответствие задаче. Для B2C-сервиса с массовой аудиторией оптимально: пароль + SMS 2FA + OAuth. Для корпоративного инструмента — SSO. Для нового продукта, ориентированного на технически продвинутую аудиторию, — Passkeys с фоллбэком. В любом случае минимум — это надёжное хеширование паролей, HTTPS и второй фактор для критичных действий.