Связывание аккаунта Google с OAuth

Связывание учетных записей осуществляется с использованием стандартного для отрасли протокола авторизации OAuth 2.0.

OAuth 2.1 & PKCE for Agents

Для агентов ИИ без сохранения состояния и многомодальных конвейеров рекомендуется принудительное использование OAuth 2.1 .

  • PKCE (Proof Key for Code Exchange) : Должен использоваться для защиты потока авторизационного кода и предотвращения атак перехвата.
  • Отсутствие неявного потока : Неявный поток раскрывает токены доступа в URL-адресе, что представляет собой риск безопасности для агентских сред.

Ваш сервис должен поддерживать авторизацию и точки обмена токенами , соответствующие стандартам OAuth 2.0/2.1.

Создайте проект

Для создания проекта с использованием привязки учетных записей:

  1. Перейдите в консоль Google API .
  2. Нажмите «Создать проект» .
  3. Введите имя или примите предложенное имя.
  4. Подтвердите или отредактируйте оставшиеся поля.
  5. Нажмите «Создать» .

Чтобы просмотреть идентификатор вашего проекта:

  1. Go to the Google API Console .
  2. Найдите свой проект в таблице на главной странице. Идентификатор проекта указан в столбце ID .

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

  1. Откройте страницу согласия OAuth в консоли Google API.
  2. Если появится запрос, выберите только что созданный вами проект.
  3. На странице «Экран согласия OAuth» заполните форму и нажмите кнопку «Сохранить».

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

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

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

    Области действия для API Google: Области действия позволяют вашему приложению получать доступ к личным данным пользователей Google. Для сценария использования привязки учетной записи Google достаточно области действия по умолчанию (электронная почта, профиль, OpenID), добавлять какие-либо конфиденциальные области действия не требуется. Как правило, рекомендуется запрашивать области действия постепенно, по мере необходимости доступа, а не сразу. Подробнее .

    Авторизованные домены: Для вашей защиты и защиты ваших пользователей Google разрешает использовать авторизованные домены только приложениям, аутентифицирующимся с помощью OAuth. Ссылки на ваши приложения должны размещаться на авторизованных доменах. Подробнее .

    Ссылка на главную страницу приложения: Домашняя страница вашего приложения. Должна размещаться на авторизованном домене.

    Application Privacy Policy link: Shown on Google Account Linking consent screen. Must be hosted on an Authorized Domain.

    Ссылка на Условия использования приложения (необязательно): Приложение должно размещаться на авторизованном домене.

    Рисунок 1. Экран согласия на привязку учетной записи Google для вымышленного приложения Tunery.

  4. Проверьте «Статус проверки». Если ваше приложение нуждается в проверке, нажмите кнопку «Отправить на проверку», чтобы отправить приложение на проверку. Подробную информацию см. в требованиях к проверке OAuth .

Implement your OAuth server

Реализация потока авторизационного кода на сервере OAuth 2.0 состоит из двух конечных точек, которые ваш сервис предоставляет по протоколу HTTPS. Первая конечная точка — это точка авторизации, которая отвечает за поиск или получение согласия пользователей на доступ к данным. Точка авторизации отображает пользовательский интерфейс входа в систему для пользователей, которые еще не авторизованы, и регистрирует согласие на запрошенный доступ. Вторая конечная точка — это точка обмена токенами, которая используется для получения зашифрованных строк, называемых токенами, которые авторизуют пользователя для доступа к вашему сервису.

Когда приложению Google необходимо вызвать один из API вашего сервиса, Google использует эти конечные точки вместе, чтобы получить разрешение от ваших пользователей на вызов этих API от их имени.

Привязка учетной записи Google: процесс авторизации OAuth.

На приведенной ниже диаграмме подробно описаны взаимодействия между пользователем, Google и конечными точками вашего сервиса.

Пользователь Приложение Google / Браузер Сервер Google Ваша авторизация Конечная точка Ваш токен Конечная точка 1. Пользователь инициирует создание ссылки. 2. Перенаправление на конечную точку аутентификации (GET) client_id, redirect_uri, state, scope 3. Отобразить экран входа в систему и согласия. 4. Пользователь проходит аутентификацию и дает согласие. 5. Перенаправление обратно на Google (GET) код, состояние 6. Обработка перенаправления и пароля/состояния 7. Обмен токенов (POST) grant_type=authorization_code, code 8. Возврат токенов (200 OK) access_token, refresh_token 9. Хранение пользовательских токенов 10. Доступ к пользовательским ресурсам
Рисунок 1. Последовательность событий в процессе авторизации OAuth 2.0 для привязки учетной записи Google.

Роли и обязанности

В таблице ниже определены роли и обязанности участников процесса OAuth-аутентификации при привязке учетной записи Google (GAL). Обратите внимание, что в GAL Google выступает в роли клиента OAuth, а ваш сервис — в роли поставщика идентификации/услуг .

Актер / Компонент Роль GAL Обязанности
Приложение/сервер Google Клиент OAuth Инициирует процесс, получает код авторизации, обменивает его на токены и безопасно сохраняет их для доступа к API вашего сервиса.
Ваша точка авторизации Сервер авторизации Проверяет подлинность пользователей и получает их согласие на передачу доступа к их данным компании Google.
Ваша конечная точка обмена токенов Сервер авторизации Проверяет коды авторизации и токены обновления, а также выдает токены доступа на сервер Google.
URI перенаправления Google Конечная точка обратного вызова Получает от вашей службы авторизации перенаправление пользователя с указанием code и state .

Сессия авторизации OAuth 2.0, инициированная Google, имеет следующий порядок действий:

  1. Google открывает вашу точку авторизации в браузере пользователя. Если процесс начался на устройстве, поддерживающем только голосовое управление, для действия, Google переносит выполнение на телефон.
  2. Пользователь входит в систему, если он еще не вошел, и предоставляет Google разрешение на доступ к своим данным через ваш API, если он еще не предоставил такое разрешение.
  3. Ваш сервис создает код авторизации и возвращает его в Google. Для этого перенаправьте браузер пользователя обратно на сайт Google, прикрепив к запросу код авторизации.
  4. Google отправляет код авторизации на вашу конечную точку обмена токенов, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это кратковременный токен, который ваш сервис принимает в качестве учетных данных для доступа к API. Токен обновления — это долговременный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока действия предыдущих.
  5. После завершения пользователем процедуры привязки учетной записи каждый последующий запрос, отправляемый Google, будет содержать токен доступа.

Рецепт реализации

Выполните следующие шаги для реализации процесса авторизации с использованием кода авторизации.

Шаг 1: Обработка запросов на авторизацию

Когда Google инициирует привязку учетной записи, он перенаправляет пользователя на вашу конечную точку авторизации. Подробные сведения о протоколах и требованиях к параметрам см. в разделе « Конечная точка авторизации» .

Для обработки запроса выполните следующие действия:

  1. Подтвердите запрос :

    • Убедитесь, что client_id совпадает с идентификатором клиента, присвоенным Google.
    • Убедитесь, что redirect_uri соответствует ожидаемому URL-адресу перенаправления Google: none https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
    • Убедитесь, что response_type имеет code .
  2. Аутентификация пользователя :

    • Проверьте, вошел ли пользователь в вашу систему.
    • Если пользователь не авторизован, предложите ему пройти процедуру входа или регистрации.
  3. Сгенерируйте код авторизации :

    • Создайте уникальный, не поддающийся угадыванию код авторизации, связанный с пользователем и клиентом.
    • Установите срок действия кода примерно на 10 минут.
  4. Перенаправить обратно на Google :

    • Перенаправьте браузер на URL-адрес, указанный в redirect_uri .
    • Добавьте следующие параметры запроса:
      • code : сгенерированный вами код авторизации.
      • state : Неизмененное значение состояния, полученное от Google.

Шаг 2: Обработка запросов на обмен токенов

Ваша конечная точка обмена токенов обрабатывает два типа запросов: обмен кодов на токены и обновление просроченных токенов доступа. Подробные сведения о протоколах и требованиях к параметрам см. в разделе « Конечная точка обмена токенов» .

А. Обмен кодов авторизации на токены.

Когда Google получает код авторизации, он вызывает вашу конечную точку обмена токенов (POST) для получения токенов.

  1. Подтвердите запрос :

    • Проверьте client_id и client_secret .
    • Убедитесь, что код авторизации действителен и не просрочен.
    • Убедитесь, что redirect_uri совпадает со значением, использованным на шаге 1.
    • Если проверка не пройдена, верните HTTP- 400 Bad Request с {"error": "invalid_grant"} .
  2. Выдача токенов :

    • Сгенерируйте долгосрочный refresh_token и краткосрочный access_token (обычно на 1 час).
    • Возвращает HTTP-код 200 OK со стандартным JSON-токеном.

B. Обновить токены доступа

Когда срок действия токена доступа истекает, Google запрашивает новый токен, используя токен обновления.

  1. Подтвердите запрос :

    • Проверьте client_id , client_secret и refresh_token .
    • Если проверка не пройдена, верните HTTP- 400 Bad Request с {"error": "invalid_grant"} .
  2. Выдать новый токен доступа :

    • Сгенерировать новый кратковременный access_token .
    • Возвращает HTTP-код 200 OK с ответом в формате JSON (опционально, включая новый токен обновления).
处理 userinfo 请求

userinfo 端点是受 OAuth 2.0 保护的资源,会返回关联用户的声明。实现和托管 userinfo 端点是可选的,但以下用例除外:

从您的令牌端点成功检索到访问令牌后,Google 会向您的 userinfo 端点发送请求,以检索关联用户的基本个人资料信息。

userinfo 端点请求标头
Authorization header Bearer 类型的访问令牌。

例如,如果您的 userinfo 端点可通过 https://myservice.example.com/userinfo 时,请求可能如下所示:

GET /userinfo HTTP/1.1
Host: myservice.example.com
Authorization: Bearer ACCESS_TOKEN

为了让 userinfo 端点能够处理请求,请执行以下步骤:

  1. 从 Authorization 标头中提取访问令牌,并返回与访问令牌相关联的用户的信息。
  2. 如果访问令牌无效,则使用 WWW-Authenticate 响应标头返回 HTTP 401 Unauthorized 错误。下面是一个 userinfo 错误响应示例:
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: error="invalid_token",
    error_description="The Access Token expired"
    
    如果在关联过程中返回 401 未经授权错误或任何其他失败的错误响应,该错误将无法恢复,检索到的令牌将被舍弃,并且用户必须重新开始关联流程。
  3. 如果访问令牌有效,则返回 HTTPS 正文中包含以下 JSON 对象的 HTTP 200 响应 回答:

    {
    "sub": "USER_UUID",
    "email": "EMAIL_ADDRESS",
    "given_name": "FIRST_NAME",
    "family_name": "LAST_NAME",
    "name": "FULL_NAME",
    "picture": "PROFILE_PICTURE",
    }
    如果您的 userinfo 端点返回 HTTP 200 成功响应,则系统会针对用户的 Google 账号注册检索到的令牌和声明。

    userinfo 端点响应
    sub 系统中用于识别用户的唯一 ID。
    email 用户的电子邮件地址。
    given_name 可选:用户的名字。
    family_name 可选:用户的姓氏。
    name 可选:用户的全名。
    picture 可选:用户的个人资料照片。

Validating your implementation

Вы можете проверить свою реализацию, используя инструмент OAuth 2.0 Playground .

В инструменте выполните следующие действия:

  1. Нажмите конфигурации », чтобы открыть окно «Конфигурация OAuth 2.0».
  2. В поле «Процесс аутентификации OAuth» выберите «На стороне клиента» .
  3. В поле «Конечные точки OAuth» выберите «Пользовательские» .
  4. Укажите в соответствующих полях вашу конечную точку OAuth 2.0 и идентификатор клиента, который вы присвоили Google.
  5. В разделе «Шаг 1» не выбирайте никаких областей действия Google. Вместо этого оставьте это поле пустым или введите область действия, действительную для вашего сервера (или произвольную строку, если вы не используете области действия OAuth). После завершения нажмите «Авторизовать API» .
  6. В разделах «Шаг 2» и «Шаг 3» пройдите весь процесс аутентификации OAuth 2.0 и убедитесь, что каждый шаг работает должным образом.

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

В инструменте выполните следующие действия:

  1. Нажмите кнопку « Войти через Google» .
  2. Выберите учетную запись, которую хотите связать.
  3. Введите идентификатор службы.
  4. При желании укажите одну или несколько областей доступа, к которым вы запрашиваете доступ.
  5. Нажмите «Начать демонстрацию» .
  6. При появлении запроса подтвердите свое согласие и отклоните запрос на привязку.
  7. Убедитесь, что вас перенаправили на вашу платформу.