Яка різниця між авторизацією та автентифікацією?
Яка різниця між авторизацією та аутентифікацією?
Аутентифікація та авторизація — це два різні, але взаємопов'язані процеси безпеки в веб-додатках.
Аутентифікація
Аутентифікація — це процес перевірки особи користувача. Система визначає, хто ви є.
Основні характеристики
- Відповідає на запитання: "Хто ви?"
- Перевіряє облікові дані (логін/пароль, токен, біометрія)
- Відбувається перед авторизацією
- Результат: користувач ідентифікований або ні
Приклади аутентифікації
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;
}Методи аутентифікації
- Ім'я користувача та пароль — класичний підхід
- OAuth 2.0 — вхід через Google, Facebook тощо
- JWT Tokens — цифрово підписані токени
- Біометрія — відбиток пальця, Face ID
- Двофакторна аутентифікація (2FA) — додатковий код з SMS або програми
- Магічні посилання — посилання для входу, надіслане електронною поштою
Авторизація
Авторизація — це процес перевірки прав доступу. Система визначає, що вам дозволено робити.
Основні характеристики
- Відповідає на запитання: "Що вам дозволено робити?"
- Перевіряє дозволи та ролі користувача
- Відбувається після аутентифікації
- Результат: доступ надано або відмовлено
Приклади авторизації
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();
}Моделі авторизації
- Контроль доступу на основі ролей (RBAC) — на основі ролей (адмін, користувач, модератор)
- Контроль доступу на основі атрибутів (ABAC) — на основі атрибутів користувача
- Списки контролю доступу (ACL) — списки доступу для кожного ресурсу
- Контроль доступу на основі політик (PBAC) — на основі політик безпеки
Ключові відмінності
| Критерій | Аутентифікація | Авторизація |
|---|---|---|
| Запитання | "Хто ви?" | "Що ви можете робити?" |
| Мета | Перевірка особи | Перевірка дозволів |
| Порядок | Перший крок | Другий крок |
| Дані | Логін, пароль, токен | Ролі, дозволи, політики |
| Результат | Успішний вхід / відмовлено | Доступ надано / відмовлено |
| HTTP статус | 401 Unauthorized | 403 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 з ім'ям користувача та паролем
- Розблокування телефону за відбитком пальця
- Показ паспорта на контрольному пункті
Авторизація
- Доступ до адмін-панелі тільки для адміністраторів
- Редагування лише своїх постів у соціальних мережах
- Перегляд приватних файлів тільки власником
Поради для співбесід
- Запам'ятайте порядок: спочатку аутентифікація, потім авторизація
- Розрізняйте HTTP коди: 401 для аутентифікації, 403 для авторизації
- Надавайте приклади: JWT для аутентифікації, RBAC для авторизації
- Розумійте зв'язок: немає авторизації без аутентифікації
- Знайте методи: OAuth, JWT, 2FA для аутентифікації; RBAC, ACL для авторизації
Резюме
- Аутентифікація — перевірка особи ("Хто ви?")
- Авторизація — перевірка дозволів ("Що ви можете робити?")
- Аутентифікація завжди відбувається перед авторизацією
- 401 — помилка аутентифікації, 403 — помилка авторизації
- Обидва процеси є критично важливими для безпеки додатка
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.