Автентифікація та авторизація — два окремих процеси, які вирішують різні завдання безпеки. Автентифікація відповідає на питання «хто це?», авторизація — «що дозволено цьому користувачу робити?». Розмежування цих процесів критично важливе для проєктування захищених систем: помилки в автентифікації дозволяють стороннім увійти, помилки в авторизації — отримати доступ до чужих даних після входу.
Що таке автентифікація
Автентифікація — це верифікація того, що користувач (або система) є тим, за кого себе видає. Процес перевіряє надані облікові дані й дозволяє або відхиляє вхід.
Методи автентифікації:
- На основі знання — паролі, PIN-коди, секретні питання. Найпоширеніший тип; найбільш вразливий до фішингу, брутфорсу та витоків
- На основі володіння — фізичний токен, смарт-карта, апаратний ключ безпеки (FIDO2/WebAuthn), одноразовий код із застосунку-автентифікатора (TOTP)
- Біометрична — відбиток пальця, розпізнавання обличчя, сканування райдужної оболонки. Зручна, але не є секретом — біометрику не можна «скинути» у разі компрометації
- На основі сертифіката — цифровий сертифікат X.509, використовується в корпоративному середовищі, mTLS та PKI-інфраструктурах
Багатофакторна автентифікація (MFA) поєднує мінімум два різні типи з перелічених. За даними CISA, MFA блокує переважну більшість атак із використанням скомпрометованих паролів, оскільки зловмиснику недостатньо одного фактора.
Що таке авторизація
Авторизація — це визначення того, які дії та ресурси дозволені користувачу після успішної автентифікації. Авторизація працює лише після того, як особу користувача підтверджено.
Основні моделі авторизації:
- RBAC (Role-Based Access Control) — доступ визначається роллю користувача в системі. Адміністратор має одні права, редактор — інші, читач — треті. Найпоширеніша модель у корпоративних системах
- ABAC (Attribute-Based Access Control) — гнучкіша модель: доступ визначається набором атрибутів користувача, ресурсу та контексту запиту (наприклад, час, геолокація, мітка класифікації даних)
- DAC (Discretionary Access Control) — власник ресурсу сам керує правами доступу до нього. Характерно для файлових систем Unix/Linux
- MAC (Mandatory Access Control) — права доступу встановлюються системними політиками, а не власником. Застосовується в системах з вимогами державної безпеки
Ключова різниця між автентифікацією та авторизацією
Обидва процеси працюють послідовно, але вирішують різні завдання:
- Автентифікація — підтверджує ідентичність. Відбувається один раз під час входу. Питання: «Це справді Іван Петренко?»
- Авторизація — визначає права. Відбувається при кожному запиті до захищеного ресурсу. Питання: «Іван Петренко може читати цей документ?»
Якщо автентифікація пройдена, але авторизація некоректна — користувач може отримати доступ до чужих даних (горизонтальне підвищення привілеїв — один із ключових ризиків за OWASP Top 10).
Принцип мінімальних привілеїв і поширені помилки
Принцип мінімальних привілеїв (Least Privilege) — кожен користувач, процес або система повинні мати лише ті права, які необхідні для виконання конкретного завдання. Це обмежує радіус ураження у разі компрометації облікового запису.
Типові помилки авторизації:
- Broken Access Control — користувач може отримати доступ до ресурсів іншого користувача, змінивши ID в URL або тілі запиту
- Privilege escalation — користувач з базовими правами може підвищити їх до адміністративних через помилку в логіці авторизації
- Missing function-level access control — захищені лише сторінки інтерфейсу, але не самі API-endpoint’и
Стандарти та протоколи
Реалізація автентифікації та авторизації у веб-системах спирається на стандартизовані протоколи:
- OAuth 2.0 — фреймворк авторизації для делегованого доступу. Детальна специфікація опублікована на oauth.net
- OpenID Connect (OIDC) — рівень автентифікації поверх OAuth 2.0; додає верифікацію ідентичності до делегованої авторизації
- SAML 2.0 — XML-протокол федеративної автентифікації та SSO в корпоративному середовищі
- FIDO2 / WebAuthn — стандарт беспарольної автентифікації на основі криптографічних ключів; офіційна документація на W3C WebAuthn
Проєктуючи систему контролю доступу, переконайтеся, що авторизація реалізована на серверній стороні — клієнтська валідація (приховування кнопок, перевірки в JavaScript) не є механізмом безпеки. Кожен API-запит до захищеного ресурсу повинен незалежно перевіряти токен і права користувача.