Skip to main content
Практика завдань

Яка різниця між авторизацією та автентифікацією?

Яка різниця між авторизацією та аутентифікацією?

Аутентифікація та авторизація — це два різні, але взаємопов'язані процеси безпеки в веб-додатках.


Аутентифікація

Аутентифікація — це процес перевірки особи користувача. Система визначає, хто ви є.

Основні характеристики

  • Відповідає на запитання: "Хто ви?"
  • Перевіряє облікові дані (логін/пароль, токен, біометрія)
  • Відбувається перед авторизацією
  • Результат: користувач ідентифікований або ні

Приклади аутентифікації

javascript
// Простий приклад аутентифікації async function authenticate(email, password) { const response = await fetch('/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email, password }) }); if (response.ok) { const { token } = await response.json(); // Зберегти токен для подальших запитів localStorage.setItem('authToken', token); return true; } return false; }

Методи аутентифікації

  1. Ім'я користувача та пароль — класичний підхід
  2. OAuth 2.0 — вхід через Google, Facebook тощо
  3. JWT Tokens — цифрово підписані токени
  4. Біометрія — відбиток пальця, Face ID
  5. Двофакторна аутентифікація (2FA) — додатковий код з SMS або програми
  6. Магічні посилання — посилання для входу, надіслане електронною поштою

Авторизація

Авторизація — це процес перевірки прав доступу. Система визначає, що вам дозволено робити.

Основні характеристики

  • Відповідає на запитання: "Що вам дозволено робити?"
  • Перевіряє дозволи та ролі користувача
  • Відбувається після аутентифікації
  • Результат: доступ надано або відмовлено

Приклади авторизації

javascript
// Приклад перевірки контролю доступу function checkAuthorization(user, resource, action) { // Перевірка ролі користувача if (action === 'delete' && user.role !== 'admin') { throw new Error('Недостатньо прав для видалення'); } // Перевірка власності ресурсу if (action === 'edit' && resource.ownerId !== user.id) { throw new Error('Ви можете редагувати лише свої власні ресурси'); } return true; } // Проміжне ПЗ для захисту маршрутів function requireAdmin(req, res, next) { if (req.user?.role !== 'admin') { return res.status(403).json({ error: 'Доступ заборонено' }); } next(); }

Моделі авторизації

  1. Контроль доступу на основі ролей (RBAC) — на основі ролей (адмін, користувач, модератор)
  2. Контроль доступу на основі атрибутів (ABAC) — на основі атрибутів користувача
  3. Списки контролю доступу (ACL) — списки доступу для кожного ресурсу
  4. Контроль доступу на основі політик (PBAC) — на основі політик безпеки

Ключові відмінності

КритерійАутентифікаціяАвторизація
Запитання"Хто ви?""Що ви можете робити?"
МетаПеревірка особиПеревірка дозволів
ПорядокПерший крокДругий крок
ДаніЛогін, пароль, токенРолі, дозволи, політики
РезультатУспішний вхід / відмовленоДоступ надано / відмовлено
HTTP статус401 Unauthorized403 Forbidden
ПрикладВхід в системуДоступ до адмін-панелі

Практичний приклад

javascript
// 1. АУТЕНТИФІКАЦІЯ — перевірка, хто є користувачем app.post('/api/auth/login', async (req, res) => { const { email, password } = req.body; const user = await User.findOne({ email }); if (!user || !await user.comparePassword(password)) { return res.status(401).json({ error: 'Невірні облікові дані' }); } const token = generateJWT(user); res.json({ token, user: { id: user.id, role: user.role } }); }); // 2. АВТОРИЗАЦІЯ — перевірка прав доступу app.delete('/api/posts/:id', authenticateToken, async (req, res) => { const post = await Post.findById(req.params.id); // Перевірка дозволів: лише автор або адмін можуть видаляти if (post.authorId !== req.user.id && req.user.role !== 'admin') { return res.status(403).json({ error: 'Недостатньо прав' }); } await post.delete(); res.json({ success: true }); }); // Проміжне ПЗ для аутентифікації function authenticateToken(req, res, next) { const token = req.headers.authorization?.split(' ')[1]; if (!token) { return res.status(401).json({ error: 'Необхідна аутентифікація' }); } try { req.user = verifyJWT(token); next(); } catch (error) { return res.status(401).json({ error: 'Невірний токен' }); } }

Процес

┌─────────────────┐ │ Користувач │ └────────┬────────┘ ┌─────────────────────────┐ │ 1. АУТЕНТИФІКАЦІЯ │ │ "Хто ви?" │ │ Логін + Пароль │ └────────┬────────────────┘ ✓ Успішно ┌─────────────────────────┐ │ 2. АВТОРИЗАЦІЯ │ │ "Що ви можете робити?" │ │ Перевірка дозволів │ └────────┬────────────────┘ ✓ Доступ надано ┌─────────────────────────┐ │ Доступ до ресурсу │ └─────────────────────────┘

HTTP коди помилок

401 Unauthorized — Помилка аутентифікації

  • Користувач не аутентифікований
  • Токен відсутній або недійсний
  • Невірні облікові дані
javascript
// Приклад 401 res.status(401).json({ error: 'Необхідний вхід' });

403 Forbidden — Помилка авторизації

  • Користувач аутентифікований, але не має прав
  • Недостатньо прав для виконання дії
javascript
// Приклад 403 res.status(403).json({ error: 'Доступ заборонено' });

Приклади з реального життя

Аутентифікація

  • Увійти в Gmail з ім'ям користувача та паролем
  • Розблокування телефону за відбитком пальця
  • Показ паспорта на контрольному пункті

Авторизація

  • Доступ до адмін-панелі тільки для адміністраторів
  • Редагування лише своїх постів у соціальних мережах
  • Перегляд приватних файлів тільки власником

Поради для співбесід

  1. Запам'ятайте порядок: спочатку аутентифікація, потім авторизація
  2. Розрізняйте HTTP коди: 401 для аутентифікації, 403 для авторизації
  3. Надавайте приклади: JWT для аутентифікації, RBAC для авторизації
  4. Розумійте зв'язок: немає авторизації без аутентифікації
  5. Знайте методи: OAuth, JWT, 2FA для аутентифікації; RBAC, ACL для авторизації

Резюме

  • Аутентифікація — перевірка особи ("Хто ви?")
  • Авторизація — перевірка дозволів ("Що ви можете робити?")
  • Аутентифікація завжди відбувається перед авторизацією
  • 401 — помилка аутентифікації, 403 — помилка авторизації
  • Обидва процеси є критично важливими для безпеки додатка

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.

Дочитали статтю?
Практика завдань