Два слоя защиты
«Кто ты» и «что тебе можно» — это разные вопросы
Любое приложение с личными кабинетами решает два вопроса подряд. Первый — подтвердить, что вы тот, за кого себя выдаёте. Второй — решить, что именно вам разрешено делать.
Аутентификация (authentication, сокращённо authn — «кто ты») — подтверждение личности. Вы вводите логин и пароль, получаете код из СМС или нажимаете «Войти через Google». Система убеждается: да, это действительно вы.2
Авторизация (authorization, сокращённо authz — «что тебе можно») — проверка прав после того, как личность уже подтверждена. Можно ли вам открыть страницу администратора? Удалить чужой заказ? Увидеть чужой профиль? Это уже другой вопрос.3
📌 Частая дыра: проверили вход, забыли проверить права. Агент добавил вход (authn) — но не добавил проверку, что конкретному пользователю это действие разрешено (authz). Если видите «добавлю аутентификацию» — уточните: «а права тоже проверяешь?»
Как приложение помнит, что вы вошли
HTTP — протокол «без памяти» (stateless, как обсуждали в блоке 1): каждый запрос независим, сервер не помнит предыдущего. Чтобы не просить пароль на каждой странице, после входа выдают «пропуск».
Кука (cookie) — маленький кусочек данных, который браузер хранит у себя и автоматически отправляет серверу при каждом запросе на этот сайт. Вы не делаете ничего специально — браузер делает это сам.1
Сессия (session) — сервер помнит ваш вход на своей стороне. Пользователю выдаётся идентификатор сессии (обычно кладётся в куку) — короткая строка вроде «пропуска с номером». Сервер по этому номеру находит ваши данные у себя.
Токен / JWT (JSON Web Token, произносится «джот») — подписанный «пропуск», в котором уже зашита информация о пользователе. Сервер не хранит его у себя — он просто проверяет подпись при каждом запросе и доверяет тому, что написано внутри. JWT часто хранят в куке или в локальном хранилище браузера.
📌 «Сессия истекла» — значит, пропуск просрочен. Нужно войти заново и получить новый.