Ответ вслух Senior Аутентификация и сессии обновлено

Спроектируйте безопасную аутентификацию

Вопрос

Вы проектируете аутентификацию для нового B2C-продукта: веб и мобильное приложение. Какие решения вы примете?

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Пароли храню в Argon2id, требую длину от 12 символов без правил сложности, проверяю по базе утечек. С первого дня поддерживаю passkeys и TOTP как второй фактор.

Что должно прозвучать в ответе

  • Хранение паролей: Argon2id или bcrypt, проверка по утечкам, длина вместо сложности

  • MFA и passkeys, восстановление доступа без слабых мест

  • Сессии: серверные или короткий access и refresh с ротацией, флаги cookie

  • Защита входа: лимиты, обнаружение аномалий, одинаковые ответы

  • Мобильное приложение: OAuth Code + PKCE или свой flow с безопасным хранилищем

  • Логи событий аутентификации и уведомления пользователю

Что могут спросить следом

  • Как устроите восстановление доступа, если пользователь потерял устройство с passkey?
  • Где будете хранить токены в мобильном приложении?

Разбор

Образцовый ответ: «Пароли храню в Argon2id, требую длину от 12 символов без правил сложности, проверяю по базе утечек. С первого дня поддерживаю passkeys и TOTP как второй фактор. Восстановление продумываю особо: резервные коды, подтверждение по почте с задержкой и уведомлением, без секретных вопросов. Веб: серверная сессия в cookie __Host- с HttpOnly, Secure, SameSite=Lax, перевыпуск id при входе, тайм-ауты, список активных сессий. Мобильное приложение: короткий access и ротируемый refresh-токен в Keychain или Keystore, обнаружение повторного использования refresh. На вход лимиты и оценка риска, одинаковые ответы. Все события входа, сброса и смены факторов в аудит-лог, пользователю письмо о новом устройстве».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.