Как реализовать авторизацию и что происходит после отправки логина и пароля на бэк
Что проверяют
Видите ли вы всю цепочку от формы до защищённого запроса и понимаете ли, где в ней граница ответственности фронтенда. Следом обычно спрашивают, где хранить токен и как это связано с XSS и CSRF.
Как отвечать
Проведите запрос по шагам:
- форма: поля с
autocomplete="username"иautocomplete="current-password", чтобы работали менеджеры паролей. Кнопка блокируется на время запроса; - отправка:
fetchметодомPOSTпо HTTPS, пароль в теле, не в URL. Хешировать пароль на клиенте смысла нет: хеш просто становится новым паролем, а от перехвата защищает TLS; - проверка на сервере: сервер ограничивает число попыток, находит пользователя и сравнивает пароль с хешем (argon2id или bcrypt) функцией библиотеки, соль хранится внутри самого хеша. На «нет такого пользователя» и «неверный пароль» ответ одинаковый, чтобы не раскрывать, какие логины существуют;
- сессия: сервер создаёт запись сессии в хранилище, например в Redis, и отвечает
Set-Cookieс флагамиHttpOnly,Secure,SameSite=Lax. Идентификатор при входе выдаётся новый, это защита от session fixation. Альтернатива: короткий access JWT и refresh token вHttpOnlycookie; - дальнейшие запросы: браузер сам прикладывает cookie. Если API на другом домене, нужны
credentials: 'include'и CORS сAccess-Control-Allow-Credentials: trueи явным origin. Сервер на каждом запросе проверяет сессию или подпись иexpу JWT.
На фронтенде после входа запрашивают /me и кладут пользователя в состояние приложения. Общая обёртка над fetch на 401 один раз пробует обновить сессию, а потом ведёт на страницу входа.
Где спотыкаются
Говорят «пароль шифруется». Пароль хешируется необратимой медленной функцией, расшифровать его нельзя, в этом весь смысл.
Хранят токен в localStorage и не видят риска: любой XSS читает его одной строкой. Обратная крайность: считают, что HttpOnly cookie решает всё, и забывают про CSRF, от которого защищают SameSite и CSRF-токен.
Путают аутентификацию и авторизацию, а вместе с ними 401 и 403. Первый означает «не знаем, кто вы», второй «знаем, но нельзя».