К практике
НачальныйJWTOAuthсессии
🔐JuniorJWTOAuthсессиибезопасностьавторизация
Аутентификация и авторизация
Сессии, cookies, JWT и OAuth — как сайты понимают кто ты и что тебе можно.
Нажми на шаг чтобы увидеть детали
Язык примеров:
Шаг 1 из 3
1
Аутентификация vs Авторизация
Два разных понятия
Аутентификация (authn) — это кто ты? Проверка личности: ввод логина и пароля, отпечаток пальца, SMS-код.
Авторизация (authz) — это что тебе можно? После того как ты доказал кто ты — сервер решает, к каким ресурсам у тебя есть доступ.
javascript
Аутентификация: "Я Иван, вот мой пароль"
Авторизация: "Иван может читать посты, но не удалять чужие"Как работали сессии (старый подход)
javascript
1. Пользователь вводит логин + пароль
2. Сервер проверяет в БД → создаёт сессию, сохраняет в памяти
3. Сервер отправляет браузеру cookie: Set-Cookie: sessionId=abc123
4. Браузер автоматически посылает cookie в каждом запросе
5. Сервер ищет sessionId в своей памяти → знает кто тыПроблема сессий: сервер должен хранить все активные сессии. При масштабировании (несколько серверов) — они не знают о сессиях друг друга.
JavaScript
// Старый подход — сессии на сервере
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 });
});