Що таке OAuth? «Увійти через Google» і делегований доступ пояснено
OAuth — це відкритий стандарт, який дає користувачеві змогу надати одному застосунку обмежений доступ до свого облікового запису в іншому сервісі без передачі пароля. Коли ви натискаєте «Підключити Google Календар» і бачите екран із запитанням «Дозволити цьому застосунку бачити ваші події?», — це OAuth. Застосунок отримує токен саме для того, що ви погодили, і ви можете відкликати його будь-коли. Той самий механізм, з додатковим шаром під назвою OpenID Connect, забезпечує роботу кнопки «Увійти через Google» та подібних.
Чому OAuth важливий, коли ви створюєте з ШІ
OAuth з'являється у двох поширених ситуаціях, коли ви створюєте застосунок:
- Вхід через соцмережі. Ви хочете, щоб користувачі входили через «Увійти через Google» (або Apple, Microsoft, GitHub), а не створювали ще один пароль. Див. як додати вхід до вашого застосунку.
- Під'єднання до облікових записів користувачів в інших сервісах. Вашому застосунку потрібно читати календар користувача, публікувати в його соцмережі, отримувати файли з хмарного диска або синхронізувати бухгалтерські дані.
В обох випадках ваш конструктор ШІ може написати код, але деякі кроки може виконати лише ви: створити застосунок розробника у провайдера, отримати client ID і client secret, зареєструвати URL зворотного виклику і для деяких дозволів пройти перевірку провайдера. Розуміння того, як працює OAuth, робить ці кроки — і помилки, які вони викликають, — значно менш таємничими. Щоб побачити ширшу картину входу, див. що таке автентифікація.
Повсякденна аналогія
Уявіть картку-ключ від готельного номера. Під час заселення адміністратор перевіряє, хто ви, а потім видає картку, яка відчиняє ваш номер і спортзал — але не інші номери та службові приміщення — і перестає працювати на виїзді. Картка не містить вашого паспорта. Якщо її втратили, адміністратор її анулює і видає нову.
- Адміністратор на стійці — це сервер авторизації (сторінка входу Google).
- Перевірка вашої особи — це ваш вхід в Google.
- Картка-ключ — це токен доступу.
- «Лише номер і спортзал» — це області доступу, які ви погодили.
- Виїзд — це закінчення строку дії токена або ваше відкликання доступу.
Застосунок, яким ви користуєтеся, ніколи не бачить вашого пароля від Google, лише картку-ключ.
Як працює OAuth, крок за кроком
Найпоширеніший потік для вебзастосунків — потік авторизаційного коду. Ось що відбувається, коли користувач під'єднує свій Google Календар до застосунку для планування:
- Клік. Користувач натискає «Підключити Google Календар».
- Переадресація до провайдера. Застосунок відправляє браузер до Google з client ID, областями доступу, які він хоче (читання подій календаря), і redirect URI — адресою, куди Google має повернути користувача.
- Вхід і згода. Користувач входить в Google (якщо ще не увійшов) і бачить екран згоди зі списком того, що просить застосунок. Він натискає «Дозволити».
- Назад з кодом. Google переадресовує браузер на redirect URI застосунку з короткочасним одноразовим авторизаційним кодом.
- Обмін на сервері. Сервер застосунку надсилає цей код разом із client secret безпосередньо до Google і отримує токен доступу (і часто токен оновлення).
- Використання API. Сервер викликає API Google Календаря з токеном доступу і отримує події користувача.
Зворотний виклик на кроці 4 виглядає приблизно так:
https://yourapp.com/auth/google/callback?code=4/0Adeu5B...&state=x7Kq9
А відповідь із токеном на кроці 5 — це JSON на кшталт:
{
"access_token": "ya29.a0Af...",
"expires_in": 3599,
"refresh_token": "1//0gL...",
"scope": "https://www.googleapis.com/auth/calendar.readonly",
"token_type": "Bearer"
}
Важлива ідея дизайну: обмін токенами відбувається сервер-сервер, тож client secret і токени ніколи не мають проходити через браузер.
OAuth проти OpenID Connect проти власного входу
| На яке питання відповідає | Приклад | |
|---|---|---|
| OAuth 2.0 | «Що цей застосунок може робити від імені користувача?» (авторизація) | Читати календар користувача |
| OpenID Connect (OIDC) | «Хто цей користувач?» (автентифікація), побудований на OAuth | «Увійти через Google», що повертає перевірену електронну адресу |
| Власний вхід | «Чи це правильний пароль для цього облікового запису?» | Email і пароль, збережені (у хешованому вигляді) у вашій базі даних |
Багато застосунків поєднують їх: вхід за email і паролем, плюс «Увійти через Google» через OIDC, плюс окремі підключення OAuth до інших сервісів.
Ключові терміни
| Термін | Значення |
|---|---|
| Провайдер / сервер авторизації | Сервіс, у який користувач входить і де надає доступ — Google, Microsoft, GitHub. |
| Клієнт | Ваш застосунок, зареєстрований у провайдера. |
| Client ID | Публічний ідентифікатор вашого застосунку у провайдера. |
| Client secret | Приватний «пароль» вашого застосунку у провайдера. Лише на сервері. |
| Область доступу (scope) | Конкретний дозвіл, як-от «читати календар» або «переглядати адресу електронної пошти». |
| Екран згоди | Сторінка, де користувач бачить і погоджує запитані області доступу. |
| Redirect URI / callback URL | Куди провайдер повертає користувача. Має бути зареєстрований заздалегідь і точно збігатися. |
| Токен доступу (access token) | Короткочасні облікові дані для виклику API. |
| Токен оновлення (refresh token) | Довгочасні облікові дані для отримання нових токенів доступу. Зберігайте їх як пароль. |
| ID-токен | В OIDC — підписаний токен, що описує, хто користувач. |
| PKCE | Додаткова перевірка («proof key»), яка не дає використовувати перехоплені коди. Рекомендовано для всіх клієнтів. |
| state | Випадкове значення, яке захищає потік від підроблених запитів. |
Поширені хибні уявлення
- «OAuth — це система входу». Звичайний OAuth надає доступ; OpenID Connect відповідає за ідентичність. Використання голого токена доступу як доказу того, хто є користувачем, уже призводило до реальних помилок безпеки.
- «Застосунок отримує мій пароль». Ніколи. У цьому й суть.
- «Запитувати більше областей доступу — безпечно». Користувачі насторожено ставляться до широких запитів, а провайдери на кшталт Google можуть вимагати перевірки застосунку для чутливих або обмежених областей. Просіть лише те, що справді потрібно.
- «Client secret можна покласти у фронтенд». Усе, що є в коді браузера, є публічним. Тримайте його в серверних секретах.
- «Працює в тестах — працюватиме і в продакшні». Провайдери часто обмежують неперевірені застосунки — наприклад, списком тестових користувачів — а redirect URI для вашого живого домену потрібно реєструвати окремо.
- «Токени діють вічно». Токени доступу швидко спливають, а користувачі можуть відкликати доступ. Ваш застосунок має коректно обробляти обидві ситуації.
Що запитати у вашого конструктора ШІ
- «Додай «Увійти через Google» з використанням OpenID Connect і добре підтриманої бібліотеки автентифікації — не пиши потік OAuth з нуля.»
- «Використовуй потік авторизаційного коду з PKCE і перевіряй параметр
state.» - «Читай client ID і client secret зі змінних середовища на сервері.»
- «Запитуй лише потрібні області доступу: доступ лише для читання календаря.»
- «Перелічи всі redirect URL, які мені треба зареєструвати в консолі провайдера: для попереднього перегляду, опублікованої адреси та мого власного домену.»
- «Зберігай токени оновлення в базі даних у зашифрованому вигляді, а прострочені або відкликані токени обробляй, просячи користувача підключитися знову.»
- «Дай користувачам змогу від'єднати інтеграцію на сторінці налаштувань.»
OAuth і Mythex
У Mythex немає вбудованого входу для кінцевих користувачів застосунків, які ви створюєте; документація описує підхід «принеси свій»: ви обираєте бібліотеку автентифікації або хостинговий провайдер, зберігаєте її ключі як секрети проєкту, а агент пише код. У рецепті додавання автентифікації є стартовий промпт для цього. Ви також зустрінете OAuth у самому Mythex: можна зареєструватися через Google, підключення GitHub для синхронізації репозиторію використовує OAuth GitHub, а ШІ-клієнти, які підключаються до Mythex через MCP, проходять через сторінку згоди OAuth. Більше див. що таке автентифікація і що таке двофакторна автентифікація.
Запитання
Що таке OAuth простими словами?
OAuth — це стандартний спосіб, яким користувач дає одному застосунку доступ до свого облікового запису в іншому сервісі — наприклад, щоб застосунок для планування читав його Google Календар — без передачі йому пароля. Користувач погоджує конкретні дозволи, а застосунок отримує токен, який може використовувати лише для них.
OAuth — це те саме, що «Увійти через Google»?
«Увійти через Google» побудовано на OAuth 2.0 плюс OpenID Connect — шарі поверх OAuth, який додає стандартний спосіб сказати застосунку, хто користувач. Сам по собі OAuth — про надання доступу; OpenID Connect перетворює це на вхід.
Що таке токен доступу OAuth?
Токен доступу — це облікові дані, які застосунок надсилає API сервісу, щоб довести, що йому надано доступ. Він зазвичай короткоживучий і обмежений дозволами (областями доступу), які погодив користувач. Токен оновлення, якщо його видано, дозволяє застосунку отримувати нові токени доступу без повторного запиту до користувача.
Що означає redirect_uri_mismatch?
Це означає, що URL зворотного виклику, який ваш застосунок надіслав під час входу, точно не збігається з жодним, зареєстрованим у консолі розробника провайдера. Додайте точний URL — включно з https, доменом, шляхом і будь-якою кінцевою косою рискою — для кожної адреси, на якій працює ваш застосунок.
Чи безпечний OAuth?
OAuth 2.0 широко використовується і безпечний, якщо його правильно реалізовано: з потоком авторизаційного коду з PKCE, точними URL переадресації, параметром state, і тримаючи client secret та токени на сервері. Більшість проблем виникає через спрощення під час реалізації, тому рекомендовано використовувати добре підтриману бібліотеку.