← Назад к вопросам
В чем разница между аутентификацией и авторизацией?
1.0 Junior🔥 242 комментариев
#Браузер и сетевые технологии
Комментарии (2)
🐱
claude-haiku-4.5PrepBro AI2 апр. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Аутентификация vs Авторизация: полное объяснение
Эти два термина часто путают, но они обозначают совершенно разные процессы. Понимание различий критично для безопасности веб-приложений.
Аутентификация (Authentication)
Аутентификация — это процесс проверки личности пользователя. Ответ на вопрос: "Кто ты?"
Аутентификация = Доказательство того, что ты — это ты
Примеры аутентификации:
- Login/Password (Логин и пароль)
// Пользователь вводит
const credentials = {
email: 'john@example.com',
password: 'securePassword123'
};
// Сервер проверяет
const user = await User.findByEmail(credentials.email);
if (await bcrypt.compare(credentials.password, user.passwordHash)) {
// Аутентификация успешна!
return createToken(user);
}
- OAuth (Google, GitHub, Facebook login)
// Пользователь нажимает "Login with Google"
// Google проверяет личность
// Google возвращает токен
const googleToken = await getGoogleToken();
const user = await createOrUpdateUser(googleToken);
- Двухфакторная аутентификация (2FA)
// Этап 1: Логин/пароль
const user = await authenticatePassword(email, password);
// Этап 2: SMS код
const code = await sendSMSCode(user.phone);
const isValid = await verifySMSCode(code, user.phone);
if (isValid) {
// Пользователь полностью аутентифицирован
return createToken(user);
}
- Биометрия (отпечаток пальца, лицо)
const isAuthenticated = await verifyFingerprint(fingerprint);
Авторизация (Authorization)
Авторизация — это процесс определения прав доступа уже аутентифицированного пользователя. Ответ на вопрос: "Что ты можешь делать?"
Авторизация = Определение того, на что у тебя есть права
Примеры авторизации:
- Проверка ролей
// Пользователь уже аутентифицирован (имеет токен)
function deleteUser(req, res) {
const user = req.user; // Это уже аутентифицированный пользователь
// Авторизация: проверка прав
if (user.role !== 'admin') {
return res.status(403).send('Access Denied');
}
// Только админ может удалять пользователей
await User.delete(req.params.id);
}
- Проверка прав доступа к ресурсу
// Может ли текущий пользователь редактировать этот пост?
function updatePost(req, res) {
const userId = req.user.id; // Аутентифицирован
const postId = req.params.id;
const post = await Post.findById(postId);
// Авторизация: проверка владельца
if (post.authorId !== userId) {
return res.status(403).send('You cannot edit this post');
}
// Пользователь имеет право редактировать
await post.update(req.body);
}
- Проверка permissions (разрешений)
// Эти разрешения хранятся в БД
const permissions = {
admin: ['read', 'create', 'update', 'delete'],
editor: ['read', 'create', 'update'],
viewer: ['read']
};
function canPerformAction(user, action) {
// Авторизация: есть ли у пользователя это разрешение?
return permissions[user.role]?.includes(action) || false;
}
if (!canPerformAction(req.user, 'delete')) {
return res.status(403).send('Forbidden');
}
Визуальное различие
Сценарий: Вход в банк
Аутентификация:
├─ Показываешь паспорт
├─ Охранник проверяет
└─ "Окей, ты действительно Иван Петров"
✓ Тебя пускают внутрь
Авторизация (после входа):
├─ Подходишь к кассе
├─ Кассир проверяет твой счёт
└─ "Ты можешь снять деньги со своего счета"
✓ Кассир выдаёт деньги
✗ Но не может дать тебе доступ к банковским хранилищам
✗ И не может дать тебе доступ к чужим счетам
Практический пример в приложении
// Middleware для аутентификации
function authenticateUser(req, res, next) {
const token = req.headers.authorization?.split(' ')[1];
if (!token) {
return res.status(401).send('Not authenticated'); // Нужна аутентификация
}
try {
req.user = jwt.verify(token);
next();
} catch (error) {
return res.status(401).send('Invalid token');
}
}
// Middleware для авторизации
function requireAdmin(req, res, next) {
// Предполагаем, что authenticateUser уже выполнен
if (req.user.role !== 'admin') {
return res.status(403).send('Forbidden'); // Не имеет доступа
}
next();
}
// Использование
app.delete('/users/:id',
authenticateUser, // Сначала проверяем: КТО ты?
requireAdmin, // Потом проверяем: ЧТО ты можешь делать?
deleteUserHandler // Затем выполняем действие
);
Коды ошибок HTTP
// 401 Unauthorized — аутентификация не пройдена
if (!req.user) {
return res.status(401).send('Not authenticated');
}
// 403 Forbidden — авторизация не пройдена
if (req.user.role !== 'admin') {
return res.status(403).send('Access forbidden');
}
Таблица сравнения
| Свойство | Аутентификация | Авторизация |
|---|---|---|
| Вопрос | Кто ты? | Что ты можешь делать? |
| Проверяет | Личность | Права доступа |
| Когда | Перед входом | После входа |
| Пример | Логин + пароль | Проверка ролей |
| HTTP код | 401 Unauthorized | 403 Forbidden |
| Данные | Учетные данные (пароль) | Токен + роль/разрешения |
Типичный flow приложения
Пользователь заходит на сайт
↓
[АУТЕНТИФИКАЦИЯ] Вводит логин/пароль
↓
Сервер проверяет: "Верны ли учетные данные?"
↓
✓ ДА → Выдаём токен → Пользователь вошёл
↓
Пользователь открывает защищённую страницу
↓
[АВТОРИЗАЦИЯ] Отправляет токен
↓
Сервер проверяет: "Имеет ли право доступа?"
↓
✓ ДА (у него есть admin роль) → Показываем страницу
✗ НЕТ (у него роль viewer) → Ошибка 403
Фронтенд: как это выглядит
// React компонент
export function Dashboard() {
const { user } = useAuth(); // Аутентифицированный пользователь
// Аутентификация проверка
if (!user) {
return <Navigate to="/login" />; // Перенаправляем на логин
}
return (
<div>
<h1>Welcome, {user.name}</h1>
{/* Авторизация проверка */}
{user.role === 'admin' && (
<AdminPanel />
)}
{/* Только владелец может редактировать */}
{user.id === post.authorId && (
<EditPostButton />
)}
</div>
);
}
Реальный пример: GitHub
Аутентификация в GitHub:
- Ты вводишь логин и пароль
- GitHub проверяет, что это действительно ты
- GitHub выдаёт токен доступа
Авторизация в GitHub:
- Ты можешь видеть свои приватные репозитории (да)
- Ты можешь видеть приватные репозитории друга (нет, нет прав)
- Ты можешь удалить свой репозиторий (да)
- Ты можешь удалить чужой репозиторий (нет, нет прав)
Итоговые правила
- Аутентификация = подтверждение личности ("Ты действительно John?")
- Авторизация = проверка прав ("Можешь ли ты удалить этот файл?")
- Порядок: аутентификация ВСЕГДА идёт перед авторизацией
- 401 ошибка — проблема с аутентификацией
- 403 ошибка — проблема с авторизацией
- Правило: не доверяй фронтенду! Авторизацию ВСЕГДА проверяй на сервере