StudyCode
Сессии, cookies, JWT и OAuth — как сайты понимают кто ты и что тебе можно.
Аутентификация (authn) — это кто ты? Проверка личности: ввод логина и пароля, отпечаток пальца, SMS-код.
Авторизация (authz) — это что тебе можно? После того как ты доказал кто ты — сервер решает, к каким ресурсам у тебя есть доступ.
Аутентификация: "Я Иван, вот мой пароль"
Авторизация: "Иван может читать посты, но не удалять чужие"1. Пользователь вводит логин + пароль
2. Сервер проверяет в БД → создаёт сессию, сохраняет в памяти
3. Сервер отправляет браузеру cookie: Set-Cookie: sessionId=abc123
4. Браузер автоматически посылает cookie в каждом запросе
5. Сервер ищет sessionId в своей памяти → знает кто тыПроблема сессий: сервер должен хранить все активные сессии. При масштабировании (несколько серверов) — они не знают о сессиях друг друга.
// Старый подход — сессии на сервере
const sessions = new Map(); // хранится на сервере
// Логин
app.post('/login', (req, res) => {
const { email, password } = req.body;
const user = db.findUser(email);
if (!user || !checkPassword(password, user.hash)) {
return res.status(401).json({ error: 'Неверные данные' });
}
const sessionId = crypto.randomUUID();
sessions.set(sessionId, { userId: user.id, role: user.role });
res.cookie('sessionId', sessionId, { httpOnly: true });
res.json({ ok: true });
});