Auth

Теорія OAuth 2.0: Поняття, Аналогії та Флоу

Грунтовне, теоретичне пояснення OAuth 2.0 та OpenID Connect через життєві аналогії. Розбір учасників, токенів та всіх основних Authorization Flows (Grant Types) без єдиного рядка коду.

Теорія OAuth 2.0: Поняття, Аналогії та Флоу

Проблема: Синдром «Ключа від усіх дверей»

Уявіть, що ви приїхали в розкішний готель на своєму автомобілі. Біля входу вас зустрічає паркувальник (valet). Ви хочете, щоб він відігнав вашу машину на парковку.

До появи сучасних систем доступу, у вас був лише один варіант: віддати паркувальнику свій єдиний, головний ключ від машини. Що це означає на практиці? Разом із можливістю просто завести двигун і проїхати 100 метрів, ви також дали йому можливість:

  • Відкрити багажник, де лежать ваші цінні речі.
  • Відкрити бардачок з документами.
  • Поїхати на вашій машині в інше місто (ключ же повноцінний!).

В інтернеті початку 2000-х веб-сервіси працювали саме так. Якщо ви хотіли надрукувати свої фотографії з Flickr через сторонній сервіс друку, цей сервіс просив вас: "Будь ласка, введіть свій логін і пароль від Flickr". Ви віддавали свій "головний ключ". Сервіс друку міг не лише завантажити фотографії, але й видалити їх, змінити ваш пароль або написати коментарі від вашого імені. Ви змушені були безмежно довіряти повністю чужому сервісу.

Це був архітектурний кошмар безпеки. Саме для розв'язання цієї проблеми був створений OAuth 2.0.


Валет-ключ (Valet Key): Як працює OAuth 2.0

Автомобільна індустрія вирішила проблему паркувальників елегантно: винайшли Valet Key (валет-ключ). Це спеціальний, обмежений ключ. Він може лише завести двигун і відкрити двері водія. Він не може відкрити багажник або бардачок, і машина може проїхати на ньому не більше 5 кілометрів.

OAuth 2.0 (Open Authorization) — це цифровий "валет-ключ" для інтернету.

Це стандарт делегованої авторизації. Він дозволяє вам надати одному застосунку (наприклад, сервісу друку) обмежений доступ до ваших ресурсів на іншому сервісі (наприклад, у Google Photos) без передачі вашого пароля. Замість пароля сервіс отримує спеціальний "валет-ключ" — Access Token (Токен Доступу).


1. Головні учасники (Актори)

Щоб зрозуміти протокол, потрібно познайомитися з його учасниками. Уявіть, що ви (Власник) хочете, щоб Сторонній Застосунок (Наприклад, планувальник подорожей) міг іноді читати ваші події в Google Календарі.

1. Resource Owner (Власник ресурсу)

Це Ви. Звичайна людина за клавіатурою. Це ваші фотографії, ваші контакти, ваш календар. Тільки ви маєте право вирішувати, кому давати до них доступ.

2. Client (Клієнт)

Це Той, хто просить доступ. Застосунок або сервіс, що хоче отримати ваші дані. Наприклад, мобільний додаток "Super Planner", який хоче почитати ваш Google Календар. "Клієнтом" він називається не тому, що це користувач, а тому, що він є "клієнтом" по відношенню до сервера.

3. Authorization Server (Сервер Авторизації)

Це Охорона та Бюро перепусток. Його робота — впевнитися, що ви — це дійсно ви (перевірити ВАШ пароль), запитати у вас "Чи дійсно ви дозволяєте цьому Клієнту доступ?", і якщо ви згодні — виробити і видати "валет-ключ" (Access Token) для Клієнта. У нашому прикладі це сервери аутентифікації Google.

4. Resource Server (Сервер Ресурсів)

Це Сейф, де лежать дані. Сервер, де фізично зберігається ваш календар. Він не вміє видавати ключі, він вміє лише перевіряти їх. Коли Клієнт приходить до нього з "валет-ключем", Сервер Ресурсів дивиться на ключ, перевіряє його дійсність і віддає дозволені дані.

2. Аналітичний розбір понять: Токени та Scopes

Тепер подивимось на те, з чим працюють ці учасники.

Scopes (Області доступу)

Scope — це список обмежень, викарбуваний на "валет-ключі". Коли Клієнт приходить до Сервера Авторизації, він каже: "Мені потрібен доступ до календаря, контактів і щоб я міг відправляти листи". Це і є Scopes (області).

Коли Сервер Авторизації питає вас (Власника): "Цей додаток хоче читати ваші листи. Дозволяєте?" — ви бачите саме ці Scopes. Якщо ви погоджуєтеся, Сервер Авторизації записує ці дозволи (і ТІЛЬКИ ЇХ) у токен. Якщо Клієнт спробує видалити лист, Сервер Ресурсів подивиться на токен і скаже: "Тут написано тільки 'читання'. Відмовлено."

Access Token (Токен доступу)

Це і є сам "валет-ключ". Цифровий бейдж, який Клієнт показує Серверу Ресурсів. У світі OAuth він часто має вигляд довгого набору символів (JWT). Важлива деталь: Access Token має короткий термін дії. Часто від 5 до 60 хвилин. Чому? Бо якщо цей ключ хтось вкраде, краще, щоб він перетворився на гарбуз якомога швидше.

Refresh Token (Токен оновлення)

Але якщо Access Token живе лише 15 хвилин, чи потрібно Користувачу кожні 15 хвилин вводити пароль знову? Ні. Для цього існує Refresh Token. Це сертифікат на отримання нового валет-ключа.

Якщо Access Token — це перепустка гостя на територію, яка "згоряє" ввечері, то Refresh Token — це секретний талон, який гість (Клієнт) може непомітно показати охороні (Серверу Авторизації) і без вашої участі отримати новеньку перепустку на завтра. Оскільки Refresh Token дуже потужний, Клієнт надійно ховає його і ніколи не показує Серверу Ресурсів.


3. Глобальне непорозуміння: Авторизація vs Аутентифікація

Тут ми маємо зупинитися і розставити крапки над «і» у найпоширенішій плутанині сучасної IT-безпеки.

  • OAuth 2.0 — це протокол АВТОРИЗАЦІЇ (Authorization). Він відповідає на питання "Чи має право цей застосунок відкрити цей файл?".
  • OpenID Connect (OIDC) — це протокол АУТЕНТИФІКАЦІЇ (Authentication). Він відповідає на питання "Хто зараз сидить перед екраном?".

Аналогія з готелю:OAuth 2.0 — це видача електронної картки гостя. На ній не написано ваше ім'я або стать. Там написано: "Може відкрити двері 402, може ходити в басейн з 8:00 до 20:00". Для дверей басейну неважливо, як вас звати — важливо, чи є у цій картці доступ. OpenID Connect — це ваш паспорт або бейдж з фотографією. Там написано: "Це Іван Петренко, йому 30 років". Охорона дивиться на паспорт і розуміє, з ким має справу.

Коли OAuth 2.0 був створений, люди почали "ламаючи" його, використовувати для того, щоб дізнаватися "хто залогінився". Щоб стандартизувати це, індустрія створила OpenID Connect — надбудову поверх OAuth 2.0. OIDC робить лише одну річ: окрім "валет-ключа" (Access Token), він зобов'язує Сервер Авторизації видати ще й спеціальний ID Token.

ID Token — це "цифровий паспорт", який Клієнт може прочитати і сказати: "Ага, тебе звати Іван, і ось твій email".


4. Види потоків авторизації (OAuth 2.0 Flows / Grants)

Як саме Клієнт отримує токен? Цей процес називається "Grant Type" або "Flow". Існують різні потоки (маршрути) отримання токена, залежно від того, яким є Клієнт (це серверний застосунок, мобільна гра, телевізор чи розумний холодильник).

Уявіть, що Охорона (Сервер Авторизації) має кілька різних інструкцій щодо того, як видавати ключі для різних типів відвідувачів.


Резюме: Правило трьох "Так"

OAuth 2.0 та OIDC стають простими і логічними, якщо прийняти їхню філософію:

  1. Пароль користувача — святий. Сторонній застосунок (Клієнт) ніколи, за жодних обставин, не повинен його бачити або тримати у себе в пам'яті. Користувач вводить пароль лише на сторінці тієї системи, якій належить пароль (Authorization Server).
  2. Токени тимчасові, права обмежені. Клієнт завжди отримує мінімальний необхідний рівень доступу (Scopes) і на обмежений час (Access Token + Refresh Token). Якщо ви дозволили додатку читати листи, він не зможе їх надіслати.
  3. Середовище визначає маршрут. Як застосунок отримує токен (Flow), залежить тільки від рівня його безпеки. Є сейф (бекенд) — використовується Authorization Code; немає сейфа (мобільний або SPA) — PKCE; немає браузера і клавіатури (Smart TV) — Device Code; немає людини (сервіс) — Client Credentials.

І найголовніше: OAuth 2.0 дає ключ від чужого будинку, а OIDC — показує паспорт того, хто в нього заходить. Разом вони утворюють непорушний стандарт ідентифікації сучасного вебу.

Copyright © 2026