Связывание учетных записей осуществляется с использованием стандартного для отрасли протокола авторизации OAuth 2.0.
OAuth 2.1 & PKCE for Agents
Для агентов ИИ без сохранения состояния и многомодальных конвейеров рекомендуется принудительное использование OAuth 2.1 .
- PKCE (Proof Key for Code Exchange) : Должен использоваться для защиты потока авторизационного кода и предотвращения атак перехвата.
- Отсутствие неявного потока : Неявный поток раскрывает токены доступа в URL-адресе, что представляет собой риск безопасности для агентских сред.
Ваш сервис должен поддерживать авторизацию и точки обмена токенами , соответствующие стандартам OAuth 2.0/2.1.
创建项目
如需创建项目以使用账号关联,请执行以下操作:
- 前往 Google API 控制台。
- 点击 Create project 。
- 输入名称或接受生成的建议。
- 确认或修改任何剩余字段。
- 点击创建 。
如需查看项目 ID,请执行以下操作:
- 前往 Google API 控制台。
- 在着陆页的表格中找到您的项目。项目 ID 会显示在 ID 列中。
配置 OAuth 权限请求页面
Google 账号关联过程包含一个权限请求页面,该页面会告知用户请求访问其数据的应用、应用请求的数据类型以及适用的条款。您需要先配置 OAuth 权限请求页面,然后才能生成 Google API 客户端 ID。
- 打开 Google API 控制台的 OAuth 权限请求页面 页面。
- 如果系统提示您选择项目,请选择您刚刚创建的项目。
在“OAuth 权限请求页面”上,填写表单,然后点击“保存”按钮。
应用名称 :向用户征求同意的应用的名称。该名称应准确反映您的应用,并且与用户在其他位置看到的应用名称保持一致。应用名称将显示在账号关联权限请求页面上。
应用徽标:权限请求页面上显示的一张图片,用以让用户认出您的应用。徽标会显示在账号关联权限请求页面和账号设置中
支持邮箱 :用户用于针对其同意问题与您联系的邮箱。
Google API 的范围 :范围允许您的应用访问用户的私有 Google 数据。对于 Google 账号关联用例,默认范围(邮箱、个人资料、openid)就足够了,您无需添加任何敏感范围。通常,最佳做法是在需要访问权限时逐步请求范围,而不是提前请求。了解详情。
已获授权的网域 :为了保护您和您的用户,Google 只允许使用 OAuth 进行身份验证的应用使用已获授权的网域。您应用的链接必须托管在已获授权的网域上。了解详情。
应用首页链接 :应用的首页。必须托管在已获授权的网域上。
应用隐私权政策链接 :显示在 Google 账号关联权限请求页面上。必须托管在已获授权的网域上。
应用服务条款链接(可选) :必须托管在已获授权的网域上。
图 1. 虚构应用 Tunery 的 Google 账号关联权限请求页面
查看“验证状态”,如果您的应用需要验证,请点击“提交以进行验证”按钮,提交应用以进行验证。如需了解详情,请参阅 OAuth 验证要求。
Implement your OAuth server
Реализация потока авторизационного кода на сервере OAuth 2.0 состоит из двух конечных точек, которые ваш сервис предоставляет по протоколу HTTPS. Первая конечная точка — это точка авторизации, которая отвечает за поиск или получение согласия пользователей на доступ к данным. Точка авторизации отображает пользовательский интерфейс входа в систему для пользователей, которые еще не авторизованы, и регистрирует согласие на запрошенный доступ. Вторая конечная точка — это точка обмена токенами, которая используется для получения зашифрованных строк, называемых токенами, которые авторизуют пользователя для доступа к вашему сервису.
Когда приложению Google необходимо вызвать один из API вашего сервиса, Google использует эти конечные точки вместе, чтобы получить разрешение от ваших пользователей на вызов этих API от их имени.
Привязка учетной записи Google: процесс авторизации OAuth.
На приведенной ниже диаграмме подробно описаны взаимодействия между пользователем, Google и конечными точками вашего сервиса.
Роли и обязанности
В таблице ниже определены роли и обязанности участников процесса OAuth-аутентификации при привязке учетной записи Google (GAL). Обратите внимание, что в GAL Google выступает в роли клиента OAuth, а ваш сервис — в роли поставщика идентификации/услуг .
| Актер / Компонент | Роль GAL | Обязанности |
|---|---|---|
| Приложение/сервер Google | Клиент OAuth | Инициирует процесс, получает код авторизации, обменивает его на токены и безопасно сохраняет их для доступа к API вашего сервиса. |
| Ваша точка авторизации | Сервер авторизации | Проверяет подлинность пользователей и получает их согласие на передачу доступа к их данным компании Google. |
| Ваша конечная точка обмена токенов | Сервер авторизации | Проверяет коды авторизации и токены обновления, а также выдает токены доступа на сервер Google. |
| URI перенаправления Google | Конечная точка обратного вызова | Получает от вашей службы авторизации перенаправление пользователя с указанием code и state . |
Сессия авторизации OAuth 2.0, инициированная Google, имеет следующий порядок действий:
- Google открывает вашу точку авторизации в браузере пользователя. Если процесс начался на устройстве, поддерживающем только голосовое управление, для действия, Google переносит выполнение на телефон.
- Пользователь входит в систему, если он еще не вошел, и предоставляет Google разрешение на доступ к своим данным через ваш API, если он еще не предоставил такое разрешение.
- Ваш сервис создает код авторизации и возвращает его в Google. Для этого перенаправьте браузер пользователя обратно на сайт Google, прикрепив к запросу код авторизации.
- Google отправляет код авторизации на вашу конечную точку обмена токенов, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это кратковременный токен, который ваш сервис принимает в качестве учетных данных для доступа к API. Токен обновления — это долговременный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока действия предыдущих.
- После завершения пользователем процедуры привязки учетной записи каждый последующий запрос, отправляемый Google, будет содержать токен доступа.
Рецепт реализации
Выполните следующие шаги для реализации процесса авторизации с использованием кода авторизации.
Шаг 1: Обработка запросов на авторизацию
Когда Google инициирует привязку учетной записи, он перенаправляет пользователя на вашу конечную точку авторизации. Подробные сведения о протоколах и требованиях к параметрам см. в разделе « Конечная точка авторизации» .
Для обработки запроса выполните следующие действия:
Подтвердите запрос :
- Убедитесь, что
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.
- Убедитесь, что
Аутентификация пользователя :
- Проверьте, вошел ли пользователь в вашу систему.
- Если пользователь не авторизован, предложите ему пройти процедуру входа или регистрации.
Сгенерируйте код авторизации :
- Создайте уникальный, не поддающийся угадыванию код авторизации, связанный с пользователем и клиентом.
- Установите срок действия кода примерно на 10 минут.
Перенаправить обратно на Google :
- Перенаправьте браузер на URL-адрес, указанный в
redirect_uri. - Добавьте следующие параметры запроса:
-
code: сгенерированный вами код авторизации. -
state: Неизмененное значение состояния, полученное от Google.
-
- Перенаправьте браузер на URL-адрес, указанный в
Шаг 2: Обработка запросов на обмен токенов
Ваша конечная точка обмена токенов обрабатывает два типа запросов: обмен кодов на токены и обновление просроченных токенов доступа. Подробные сведения о протоколах и требованиях к параметрам см. в разделе « Конечная точка обмена токенов» .
А. Обмен кодов авторизации на токены.
Когда Google получает код авторизации, он вызывает вашу конечную точку обмена токенов (POST) для получения токенов.
Подтвердите запрос :
- Проверьте
client_idиclient_secret. - Убедитесь, что код авторизации действителен и не просрочен.
- Убедитесь, что
redirect_uriсовпадает со значением, использованным на шаге 1. - Если проверка не пройдена, верните HTTP-
400 Bad Requestс{"error": "invalid_grant"}.
- Проверьте
Выдача токенов :
- Сгенерируйте долгосрочный
refresh_tokenи краткосрочныйaccess_token(обычно на 1 час). - Возвращает HTTP-код
200 OKсо стандартным JSON-токеном.
- Сгенерируйте долгосрочный
B. Обновить токены доступа
Когда срок действия токена доступа истекает, Google запрашивает новый токен, используя токен обновления.
Подтвердите запрос :
- Проверьте
client_id,client_secretиrefresh_token. - Если проверка не пройдена, верните HTTP-
400 Bad Requestс{"error": "invalid_grant"}.
- Проверьте
Выдать новый токен доступа :
- Сгенерировать новый кратковременный
access_token. - Возвращает HTTP-код
200 OKс ответом в формате JSON (опционально, включая новый токен обновления).
- Сгенерировать новый кратковременный
Обработка запросов информации о пользователях
Конечная точка userinfo — это ресурс, защищенный OAuth 2.0, который возвращает утверждения о связанном пользователе. Реализация и размещение конечной точки userinfo не является обязательной, за исключением следующих случаев использования:
- Вход в связанную учетную запись с помощью Google One Tap.
- Простая подписка на AndroidTV.
После того как токен доступа был успешно получен из конечной точки вашего токена, Google отправляет запрос в конечную точку информации о пользователе, чтобы получить основную информацию профиля связанного пользователя.
| заголовки запроса конечной точки userinfo | |
|---|---|
Authorization header | Токен доступа типа Bearer. |
Например, если ваша конечная точка userinfo доступна по адресу https://myservice.example.com/userinfo , запрос может выглядеть следующим образом:
GET /userinfo HTTP/1.1 Host: myservice.example.com Authorization: Bearer ACCESS_TOKEN
Чтобы ваша конечная точка userinfo могла обрабатывать запросы, выполните следующие действия:
- Извлеките токен доступа из заголовка авторизации и верните информацию для пользователя, связанного с токеном доступа.
- Если токен доступа недействителен, верните ошибку HTTP 401 Unauthorized с использованием заголовка ответа
WWW-Authenticate. Ниже приведен пример ответа об ошибке с информацией о пользователе: Если в процессе связывания возвращается ошибка 401 Unauthorized или любой другой неудачный ответ об ошибке, ошибка будет невосстановимой, полученный токен будет отброшен, и пользователю придется снова инициировать процесс связывания.HTTP/1.1 401 Unauthorized WWW-Authenticate: error="invalid_token", error_description="The Access Token expired"
Если токен доступа действителен, верните ответ HTTP 200 со следующим объектом JSON в теле ответа HTTPS:
Если ваша конечная точка userinfo возвращает успешный ответ HTTP 200, полученный токен и утверждения регистрируются в учетной записи Google пользователя.{ "sub": "USER_UUID", "email": "EMAIL_ADDRESS", "given_name": "FIRST_NAME", "family_name": "LAST_NAME", "name": "FULL_NAME", "picture": "PROFILE_PICTURE", }ответ конечной точки с информацией о пользователе subУникальный идентификатор, идентифицирующий пользователя в вашей системе. emailАдрес электронной почты пользователя. given_nameНеобязательно: Имя пользователя. family_nameНеобязательно: фамилия пользователя. nameНеобязательно: Полное имя пользователя. pictureНеобязательно: изображение профиля пользователя.
Validating your implementation
您可以使用 OAuth 2.0 Playground 工具验证您的实现。
在该工具中,执行以下步骤:
- 点击配置 以打开“OAuth 2.0 配置”窗口。
- 在 OAuth flow(OAuth 流程)字段中,选择 Client-side(客户端)。
- 在 OAuth Endpoints 字段中,选择 Custom。
- 在相应字段中指定您的 OAuth 2.0 端点以及您分配给 Google 的客户端 ID。
- 在第 1 步部分中,请勿选择任何 Google 范围。请将此字段留空,或输入适用于您服务器的范围(如果您不使用 OAuth 范围,则输入任意字符串)。完成后,点击 Authorize APIs。
- 在第 2 步和第 3 步部分中,完成 OAuth 2.0 流程,并验证每个步骤是否按预期运行。
您可以使用 Google 账号关联演示工具验证您的实现。
在该工具中,执行以下步骤:
- 点击使用 Google 账号登录按钮。
- 选择您要关联的账号。
- 输入服务 ID。
- (可选)输入您将请求访问的一个或多个范围。
- 点击开始演示。
- 当系统提示时,请确认您可以同意或拒绝关联请求。
- 确认您已重定向到相应平台。