Руководства

Что такое OAuth? «Войти через Google» и делегированный доступ простыми словами

OAuth — открытый стандарт, который позволяет пользователю дать одному приложению ограниченный доступ к своему аккаунту в другом сервисе, не передавая ему пароль. Когда вы нажимаете «Подключить Google Календарь» и видите экран «Разрешить этому приложению видеть ваши события?», — это и есть OAuth. Приложение получает токен только на то, что вы одобрили, и вы можете отозвать его в любой момент. Тот же механизм с дополнительным слоем OpenID Connect лежит в основе «Войти через Google» и похожих кнопок.

Почему OAuth важен при создании приложений с ИИ

OAuth встречается в двух типичных ситуациях, когда вы создаёте приложение:

  1. Вход через соцсети. Вы хотите, чтобы пользователи входили через Google (или Apple, Microsoft, GitHub), а не создавали ещё один пароль. См. как добавить вход в приложение.
  2. Подключение к аккаунтам пользователей в других сервисах. Вашему приложению нужно читать календарь пользователя, публиковать в его соцсети, получать файлы из облачного диска или синхронизировать данные бухгалтерии.

В обоих случаях ваш конструктор ИИ может написать код, но некоторые шаги может выполнить только вы: создать приложение разработчика у провайдера, получить client ID и client secret, зарегистрировать адреса обратного вызова и для некоторых разрешений пройти проверку провайдера. Понимание того, как работает OAuth, делает эти шаги и связанные с ними ошибки куда менее загадочными. Общую картину входа см. в что такое аутентификация.

Бытовая аналогия

Представьте карту-ключ в отеле. На стойке регистрации вам подтверждают личность и выдают карту, которая открывает ваш номер и спортзал — но не другие номера и не служебные помещения — и перестаёт работать при выезде. Карта не содержит вашего паспорта. Если вы её потеряете, стойка аннулирует её и выдаст новую.

  • Стойка регистрации — сервер авторизации (страница входа Google).
  • Проверка личности — вход в аккаунт Google.
  • Карта-ключ — токен доступа.
  • «Только номер и спортзал» — области доступа (scopes), которые вы одобрили.
  • Выезд — истечение срока токена или ваш отзыв доступа.

Приложение, которым вы пользуетесь, никогда не видит пароль от Google, только карту-ключ.

Как работает OAuth, шаг за шагом

Самый распространённый поток для веб-приложений — поток с кодом авторизации. Вот что происходит, когда пользователь подключает свой Google Календарь к приложению для записи:

  1. Нажатие. Пользователь нажимает «Подключить Google Календарь».
  2. Перенаправление к провайдеру. Приложение отправляет браузер в Google с его client ID, запрошенными областями доступа (чтение событий календаря) и адресом перенаправления (redirect URI), куда Google вернёт пользователя.
  3. Вход и согласие. Пользователь входит в Google (если ещё не вошёл) и видит экран согласия со списком запрошенного. Он нажимает «Разрешить».
  4. Возврат с кодом. Google перенаправляет браузер на адрес приложения с коротким одноразовым кодом авторизации.
  5. Обмен на сервере. Сервер приложения отправляет этот код вместе с клиентским секретом напрямую в Google и получает токен доступа (и часто токен обновления).
  6. Использование 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"
}

Важная мысль в дизайне: обмен токеном происходит между серверами, поэтому клиентский секрет и токены никогда не нужно передавать через браузер.

OAuth, OpenID Connect и собственный вход

На какой вопрос отвечаетПример
OAuth 2.0«Что это приложение может делать от имени пользователя?» (авторизация)Чтение календаря пользователя
OpenID Connect (OIDC)«Кто этот пользователь?» (аутентификация), построен на OAuth«Войти через Google», возвращающий подтверждённую почту
Собственный вход«Верный ли это пароль для аккаунта?»Email и пароль, сохранённые (в хешированном виде) в вашей базе

Многие приложения комбинируют их: вход по почте и паролю, плюс «Войти через Google» через OIDC, плюс отдельные подключения OAuth к другим сервисам.

Ключевые термины

ТерминЗначение
Провайдер / сервер авторизацииСервис, куда пользователь входит и где предоставляет доступ — Google, Microsoft, GitHub.
КлиентВаше приложение, зарегистрированное у провайдера.
Client IDПубличный идентификатор вашего приложения у провайдера.
Client secretПриватный «пароль» вашего приложения у провайдера. Только на сервере.
Scope (область доступа)Конкретное разрешение, например «читать календарь» или «видеть адрес электронной почты».
Экран согласияСтраница, где пользователь видит и одобряет запрошенные области доступа.
Redirect URI / адрес обратного вызоваКуда провайдер возвращает пользователя. Должен быть заранее зарегистрирован и совпадать точно.
Токен доступаКороткоживущие учётные данные для вызова API.
Токен обновленияДолгоживущие учётные данные для получения новых токенов доступа. Храните их как пароль.
ID-токенВ OIDC — подписанный токен, описывающий пользователя.
PKCEДополнительная проверка («ключ подтверждения»), которая не даёт использовать перехваченный код. Рекомендуется для всех клиентов.
stateСлучайное значение, которое защищает поток от подложных запросов.

Частые заблуждения

  • «OAuth — это система входа». Обычный OAuth предоставляет доступ; идентификацией занимается OpenID Connect. Использование голого токена доступа как доказательства того, кто перед вами, уже приводило к реальным уязвимостям.
  • «Приложение получает мой пароль». Нет, никогда. В этом и смысл.
  • «Запрашивать больше областей доступа безвредно». Пользователи настороженно относятся к широким запросам, а такие провайдеры, как Google, могут требовать проверку приложения для чувствительных или ограниченных областей. Запрашивайте только то, что нужно.
  • «Клиентский секрет можно положить во фронтенд». Всё, что есть в коде браузера, публично. Храните его в секретах на стороне сервера.
  • «Работает в тестах — значит, будет работать в продакшене». Провайдеры часто ограничивают неподтверждённые приложения, например списком тестовых пользователей, а адрес перенаправления для вашего боевого домена нужно регистрировать отдельно.
  • «Токены действуют вечно». Токены доступа быстро истекают, а пользователи могут отозвать доступ. Ваше приложение должно корректно обрабатывать и то, и другое.

Что попросить у конструктора ИИ

  • «Добавь вход через Google с OpenID Connect, используя хорошо поддерживаемую библиотеку аутентификации — не пиши поток OAuth вручную.»
  • «Используй поток с кодом авторизации и PKCE, и проверяй параметр state.»
  • «Читай client ID и client secret из переменных окружения на сервере.»
  • «Запрашивай только нужные области доступа: только чтение календаря.»
  • «Перечисли все адреса перенаправления, которые нужно зарегистрировать в консоли провайдера: для предпросмотра, для опубликованного адреса и для собственного домена.»
  • «Храни токены обновления в базе в зашифрованном виде, а для истёкших или отозванных токенов просить пользователя подключиться заново.»
  • «Дай пользователям возможность отключить интеграцию на странице настроек.»

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?

Это значит, что адрес обратного вызова, который ваше приложение отправило при входе, не совпадает точно с адресом, зарегистрированным в консоли разработчика провайдера. Добавьте точный адрес — включая https, домен, путь и завершающий слеш — для каждого адреса, по которому работает ваше приложение.

OAuth безопасен?

OAuth 2.0 широко используется и безопасен при правильной реализации: нужны поток с кодом авторизации и PKCE, точные адреса перенаправления, параметр state, а клиентский секрет и токены должны храниться на сервере. Большинство проблем возникают из-за упрощений при реализации, поэтому рекомендуется использовать хорошо поддерживаемую библиотеку.

Mythex · Pricing · Создавайте что угодно с ИИ · Шаблоны сайтов и приложений · Сравнения Mythex · Глоссарий по созданию приложений с ИИ · Бесплатные инструменты для создания приложений с ИИ · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Bahasa Indonesia Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)