StudyCode
К практике
Начальный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 });
});