Эти два понятия постоянно путают, и именно в этой путанице живут баги безопасности. То, что пользователь вошёл в систему (аутентифицирован), ничего не говорит о том, к каким записям, действиям или аккаунтам ему следует иметь доступ (авторизация).
Где происходит каждый из процессов
| Аспект | Аутентификация | Авторизация |
|---|---|---|
| На какой вопрос отвечает | Кто это? | Что им можно делать? |
| Когда выполняется | Один раз при входе (плюс проверка сессии) | На каждый чувствительный запрос |
| Распространённые механизмы | Пароль + хеш, magic link, OAuth/SSO, MFA | Роли, права, проверки владения, политики |
| Тип сбоя | Выдача себя за другого, credential stuffing | Утечка данных между аккаунтами, эскалация привилегий |
Распространённые паттерны аутентификации
- Пароль + безопасное хеширование — по-прежнему стандарт, требует корректного хеширования (bcrypt/argon2), ограничения частоты запросов и проверки на скомпрометированные пароли
- Magic links / одноразовые коды — убирают управление паролями, хорошо подходят для низкого трения в B2B и логинах в порталы
- OAuth / SSO — делегирует идентификацию доверенному провайдеру (Google, Microsoft, корпоративный IdP); снижает разрастание паролей в B2B-софте
- Многофакторная аутентификация (MFA) — дополнительный фактор помимо того, что вы знаете; стандарт для доступа администраторов и финансовых операций
Распространённые паттерны авторизации
- Ролевая модель доступа (RBAC) — права привязаны к ролям, роли привязаны к пользователям; хорошо масштабируется для внутренних инструментов и B2B-продуктов
- Атрибутная модель доступа (ABAC) — права вычисляются из атрибутов (отдел, регион, проект), а не фиксированных ролей; более гибко, но и сложнее
- Проверки на основе владения — пользователь может действовать с ресурсом, только если владеет им или принадлежит к его аккаунту; паттерн по умолчанию для клиентских порталов и мультитенантного SaaS
// Wrong: trusts an ID supplied by the client
async function getInvoice(invoiceId: string, accountId: string) {
return db.invoice.findFirst({ where: { id: invoiceId, accountId } });
}
// Right: derives the account from the authenticated session
async function getInvoice(invoiceId: string, session: Session) {
return db.invoice.findFirst({
where: { id: invoiceId, accountId: session.accountId },
});
}
Практический чек-лист
Разделите эти два понятия в коде
Middleware аутентификации подтверждает личность и прикрепляет сессию. Проверки авторизации выполняются явно для каждого ресурса, а не предполагаются только на основе роли.
Ограничивайте каждый запрос аутентифицированной сессией
Никогда не принимайте ID аккаунта, тенанта или владельца из клиентского ввода для решений о доступе.
Выбирайте RBAC первым, добавляйте ABAC только когда роли перестают подходить
Большинство продуктов никогда не перерастают роли. Атрибутные правила добавляют реальную сложность; заслужите её, прежде чем добавлять.
Логируйте сбои авторизации
Повторяющиеся сбои авторизации с одного аккаунта — сигнал, достойный оповещения, а не молчаливого игнорирования.
FAQ
FAQ
В чём разница между аутентификацией и авторизацией?+
Аутентификация проверяет личность: подтверждает, что пользователь тот, за кого себя выдаёт, обычно через пароль, magic link или SSO. Авторизация происходит после этого и определяет, что аутентифицированному пользователю разрешено видеть или делать.
Может ли быть авторизация без аутентификации?+
Практически нет. Решения об авторизации зависят от знания, кто именно делает запрос. Без аутентификации система может применить только одинаковый публичный уровень доступа ко всем.
Что такое ролевая модель доступа (RBAC)?+
RBAC — это модель авторизации, которая назначает права ролям (администратор, редактор, наблюдатель), а не отдельным пользователям, а затем назначает пользователей на роли. Она масштабируется лучше, чем права на уровне отдельных пользователей, по мере роста команды или клиентской базы.
Похожие материалы
Технический долг: как выявлять, измерять и погашать
Практическое определение технического долга, как отличить осознанные компромиссы от случайной деградации, и повторяемый процесс погашения долга без остановки работы над фичами.
ИнженерияАрхитектура сайта простыми словами: уровни, паттерны и как выбрать подходящий
Что на самом деле означает архитектура сайта, из каких уровней она состоит, какие паттерны используются сегодня и практический фреймворк для выбора подходящего варианта с учётом реальных ограничений.
ИнженерияЧто такое клиентский портал? Определение, архитектура и когда он нужен
Чёткое определение клиентских порталов, чем они отличаются от сайтов и SaaS-продуктов, и какие архитектурные решения важны для безопасной B2B-доставки.
Newsletter
Продуктовые заметки без шума.
Редкие материалы о порталах, SaaS MVP и автоматизации.