Учетные записи связаны с использованием неявного отраслевого стандарта OAuth 2.0 и потоков кода авторизации . Ваш сервис должен поддерживать авторизацию и конечные точки обмена токенами , совместимые с OAuth 2.0.
In the implicit flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from Google.
In the authorization code flow, you need two endpoints:
The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.
The token exchange endpoint, which is responsible for two types of exchanges:
- Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
- Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.
Choose an OAuth 2.0 flow
Although the implicit flow is simpler to implement, Google recommends that access tokens issued by the implicit flow never expire. This is because the user is forced to link their account again after a token expires with the implicit flow. If you need token expiration for security reasons, we strongly recommend that you use the authorization code flow instead.
Design guidelines
This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

Requirements
- You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.
Recommendations
We recommend that you do the following:
Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.
Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.
Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.
Ability to cancel. Provide a way for users to go back or cancel, if they choose not to link.
Clear sign-in process. Ensure that users have clear method for signing in to their Google account, such as fields for their username and password or Sign in with Google.
Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.
Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.
- If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking and the implicit flow.
Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Создать проект
Чтобы создать свой проект для использования привязки аккаунтов:
- Нажмите Создать проект .
- Введите имя или примите предложенное.
- Подтвердите или отредактируйте оставшиеся поля.
- Нажмите «Создать» .
Чтобы просмотреть идентификатор вашего проекта:
- Найдите свой проект в таблице на целевой странице. Идентификатор проекта указан в столбце «Идентификатор» .
Настройте экран согласия OAuth
Процесс привязки аккаунта Google включает в себя экран согласия, на котором пользователи узнают, какое приложение запрашивает доступ к их данным, какие данные запрашиваются и какие условия применяются. Вам необходимо настроить экран согласия OAuth перед генерацией идентификатора клиента API Google.
- Откройте страницу экрана согласия OAuth в консоли API Google.
- При появлении запроса выберите проект, который вы только что создали.
На странице «Экран согласия OAuth» заполните форму и нажмите кнопку «Сохранить».
Название приложения: Название приложения, запрашивающего согласие. Название должно точно отражать ваше приложение и соответствовать названию приложения, которое пользователи видят в других местах. Название приложения будет отображаться на экране согласия на привязку учётной записи.
Логотип приложения: изображение на экране согласия, которое поможет пользователям узнать ваше приложение. Логотип отображается на экране согласия на привязку учётной записи и в настройках учётной записи.
Электронная почта службы поддержки: позволяет пользователям обращаться к вам с вопросами о своем согласии.
Области действия для API Google: Области действия позволяют вашему приложению получать доступ к личным данным пользователя Google. Для привязки аккаунта Google достаточно области действия по умолчанию (адрес электронной почты, профиль, OpenID), добавлять конфиденциальные области действия не нужно. Как правило, рекомендуется запрашивать области действия постепенно, в момент необходимости доступа, а не заранее. Подробнее .
Авторизованные домены: Чтобы защитить вас и ваших пользователей, Google разрешает использовать авторизованные домены только приложениям, использующим OAuth для аутентификации. Ссылки ваших приложений должны размещаться на авторизованных доменах. Подробнее .
Ссылка на домашнюю страницу приложения: домашняя страница вашего приложения. Должна быть размещена на авторизованном домене.
Ссылка на политику конфиденциальности приложения: отображается на экране согласия на привязку аккаунта Google. Должна быть размещена на авторизованном домене.
Ссылка на условия обслуживания приложения (необязательно): должна быть размещена на авторизованном домене.
Рисунок 1. Экран согласия на привязку аккаунта Google для фиктивного приложения Tunery
Проверьте «Статус проверки». Если ваша заявка требует проверки, нажмите кнопку «Отправить на проверку». Подробнее см. в разделе «Требования к проверке OAuth» .
Внедрите свой сервер OAuth
Реализация потока кода авторизации на сервере OAuth 2.0 состоит из двух конечных точек, которые ваша служба делает доступными по HTTPS. Первая конечная точка — это конечная точка авторизации, которая отвечает за поиск или получение согласия пользователей на доступ к данным. Конечная точка авторизации предоставляет пользовательский интерфейс входа вашим пользователям, которые еще не вошли в систему, и записывает согласие на запрошенный доступ. Вторая конечная точка — это конечная точка обмена токенами, которая используется для получения зашифрованных строк, называемых токенами, которые разрешают пользователю доступ к вашей службе.
Когда приложению Google необходимо вызвать один из API вашей службы, Google использует эти конечные точки вместе, чтобы получить от ваших пользователей разрешение на вызов этих API от их имени.
Сеанс потока кода авторизации OAuth 2.0, инициированный Google, имеет следующий процесс:
- Google открывает вашу конечную точку авторизации в браузере пользователя. Если поток для действия начался на голосовом устройстве, Google передает выполнение на телефон.
- Пользователь входит в систему, если он еще не вошел в систему, и предоставляет Google разрешение на доступ к своим данным с помощью вашего API, если он еще не предоставил разрешение.
- Ваш сервис создает код авторизации и возвращает его в Google. Для этого перенаправьте браузер пользователя обратно в Google, указав код авторизации, прикрепленный к запросу.
- Google отправляет код авторизации в конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это недолговечный токен, который ваша служба принимает в качестве учетных данных для доступа к API. Токен обновления — это долгосрочный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока их действия.
- После того как пользователь завершил процесс привязки учетной записи, каждый последующий запрос, отправленный от Google, содержит токен доступа.
Обработка запросов на авторизацию
Когда вам необходимо выполнить привязку учетной записи с использованием потока кода авторизации OAuth 2.0, Google отправляет пользователя в вашу конечную точку авторизации с запросом, который включает следующие параметры:
Параметры конечной точки авторизации | |
---|---|
client_id | Идентификатор клиента, который вы назначили Google. |
redirect_uri | URL-адрес, на который вы отправляете ответ на этот запрос. |
state | Бухгалтерское значение, которое передается обратно в Google без изменений в URI перенаправления. |
scope | Необязательно: набор строк области действия, разделенных пробелами, которые определяют данные, для которых Google запрашивает авторизацию. |
response_type | Тип значения, возвращаемого в ответе. Для потока кода авторизации OAuth 2.0 тип ответа всегда — code . |
user_locale | Языковая настройка учетной записи Google в формате RFC5646 , используемая для локализации вашего контента на предпочитаемом пользователем языке. |
Например, если ваша конечная точка авторизации доступна по адресу https://myservice.example.com/auth
, запрос может выглядеть следующим образом:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Чтобы конечная точка авторизации могла обрабатывать запросы на вход, выполните следующие действия:
- Убедитесь, что
client_id
соответствует идентификатору клиента, который вы назначили Google, и чтоredirect_uri
соответствует URL-адресу перенаправления, предоставленному Google для вашей службы. Эти проверки важны для предотвращения предоставления доступа непреднамеренным или неправильно настроенным клиентским приложениям. Если вы поддерживаете несколько потоков OAuth 2.0, также убедитесь, чтоresponse_type
равенcode
. - Проверьте, вошел ли пользователь в ваш сервис. Если пользователь не вошел в систему, завершите процедуру входа или регистрации в вашей службе.
- Создайте код авторизации, который Google будет использовать для доступа к вашему API. Код авторизации может быть любым строковым значением, но он должен однозначно представлять пользователя, клиента, для которого предназначен токен, а также время истечения срока действия кода, и его нельзя угадывать. Обычно вы выдаете коды авторизации, срок действия которых истекает примерно через 10 минут.
- Убедитесь, что URL-адрес, указанный параметром
redirect_uri
, имеет следующую форму:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Перенаправьте браузер пользователя на URL-адрес, указанный параметром
redirect_uri
. Включите только что сгенерированный код авторизации и исходное неизмененное значение состояния при перенаправлении, добавив параметрыcode
иstate
. Ниже приведен пример результирующего URL-адреса:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Обработка запросов на обмен токенов
Конечная точка обмена токенами вашей службы отвечает за два типа обмена токенов:
- Обмен кодами авторизации для токенов доступа и токенов обновления.
- Обмен токенов обновления на токены доступа
Запросы на обмен токенов включают в себя следующие параметры:
Параметры конечной точки обмена токенами | |
---|---|
client_id | Строка, которая идентифицирует источник запроса как Google. Эта строка должна быть зарегистрирована в вашей системе как уникальный идентификатор Google. |
client_secret | Секретная строка, которую вы зарегистрировали в Google для своей службы. |
grant_type | Тип обмениваемого токена. Это либо authorization_code , либо refresh_token . |
code | grant_type=authorization_code , этот параметр представляет собой код, который Google получил либо от вашей конечной точки входа в систему, либо от конечной точки обмена токенами. |
redirect_uri | grant_type=authorization_code , этот параметр представляет собой URL-адрес, используемый в первоначальном запросе авторизации. |
refresh_token | grant_type=refresh_token , этот параметр представляет собой токен обновления, который Google получил от вашей конечной точки обмена токенами. |
Обмен кодами авторизации для токенов доступа и токенов обновления.
После того как пользователь входит в систему и ваша конечная точка авторизации возвращает в Google кратковременный код авторизации, Google отправляет запрос на вашу конечную точку обмена токенами, чтобы обменять код авторизации на токен доступа и токен обновления.
Для этих запросов значение grant_type
— authorization_code
, а значение code
— это значение кода авторизации, который вы ранее предоставили Google. Ниже приведен пример запроса на обмен кода авторизации на токен доступа и токен обновления:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Чтобы обменять коды авторизации для токена доступа и токена обновления, ваша конечная точка обмена токенами отвечает на запросы POST
, выполняя следующие шаги:
- Убедитесь, что
client_id
идентифицирует источник запроса как авторизованный источник и чтоclient_secret
соответствует ожидаемому значению. - Убедитесь, что код авторизации действителен, срок его действия не истек, а идентификатор клиента, указанный в запросе, соответствует идентификатору клиента, связанному с кодом авторизации.
- Убедитесь, что URL-адрес, указанный в параметре
redirect_uri
, идентичен значению, используемому в первоначальном запросе авторизации. - Если вы не можете проверить все вышеперечисленные критерии, верните ошибку HTTP 400 Bad Request с
{"error": "invalid_grant"}
в качестве тела. - В противном случае используйте идентификатор пользователя из кода авторизации для создания токена обновления и токена доступа. Эти токены могут быть любыми строковыми значениями, но они должны уникальным образом представлять пользователя и клиента, для которых предназначен токен, и их нельзя угадывать. Для токенов доступа также запишите срок действия токена, который обычно составляет час после выдачи токена. Токены обновления не имеют срока действия.
- Верните следующий объект JSON в текст ответа HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google хранит токен доступа и токен обновления для пользователя и записывает срок действия токена доступа. По истечении срока действия токена доступа Google использует токен обновления, чтобы получить новый токен доступа из вашей конечной точки обмена токенами.
Обмен токенов обновления на токены доступа
Когда срок действия токена доступа истекает, Google отправляет запрос на вашу конечную точку обмена токенами, чтобы обменять токен обновления на новый токен доступа.
Для этих запросов grant_type
— refresh_token
, а refresh_token
— это значение токена обновления, который вы ранее предоставили Google. Ниже приведен пример запроса на обмен токена обновления на токен доступа:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Чтобы обменять токен обновления на токен доступа, ваша конечная точка обмена токенами отвечает на запросы POST
, выполняя следующие шаги:
- Убедитесь, что
client_id
идентифицирует источник запроса как Google и чтоclient_secret
соответствует ожидаемому значению. - Убедитесь, что токен обновления действителен и что идентификатор клиента, указанный в запросе, соответствует идентификатору клиента, связанному с токеном обновления.
- Если вы не можете проверить все вышеперечисленные критерии, верните ошибку HTTP 400 Bad Request с
{"error": "invalid_grant"}
в качестве тела. - В противном случае используйте идентификатор пользователя из токена обновления для создания токена доступа. Эти токены могут быть любыми строковыми значениями, но они должны уникальным образом представлять пользователя и клиента, для которых предназначен токен, и их нельзя угадывать. Для токенов доступа также запишите срок действия токена, обычно через час после выдачи токена.
- Верните следующий объект JSON в текст ответа HTTPS:
{ "token_type": "Bearer", "access_token": " ACCESS_TOKEN ", "expires_in": SECONDS_TO_EXPIRATION }
Обработка запросов информации о пользователях
Конечная точка 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
Необязательно: изображение профиля пользователя.
Проверка вашей реализации
Вы можете проверить свою реализацию с помощью инструмента OAuth 2.0 Playground .
В инструменте выполните следующие действия:
- Нажмите конфигурации» , чтобы открыть окно «Конфигурация OAuth 2.0».
- В поле «Поток OAuth» выберите «Клиентская сторона» .
- В поле «Конечные точки OAuth» выберите «Пользовательский» .
- Укажите конечную точку OAuth 2.0 и идентификатор клиента, который вы назначили Google, в соответствующих полях.
- В разделе «Шаг 1» не выбирайте области действия Google. Вместо этого оставьте это поле пустым или введите область действия, действительную для вашего сервера (или произвольную строку, если вы не используете области действия OAuth). Закончив, нажмите «Авторизовать API» .
- В разделах «Шаг 2» и «Шаг 3» выполните процедуру OAuth 2.0 и убедитесь, что каждый шаг работает должным образом.
Вы можете проверить свою реализацию, используя демонстрационный инструмент привязки учетных записей Google .
В инструменте выполните следующие действия:
- Нажмите кнопку «Войти через Google» .
- Выберите аккаунт, который хотите связать.
- Введите идентификатор услуги.
- При необходимости введите одну или несколько областей, для которых вы запросите доступ.
- Нажмите «Начать демонстрацию» .
- При появлении запроса подтвердите, что вы можете согласиться и отклонить запрос на установление связи.
- Подтвердите, что вы перенаправлены на вашу платформу.
Учетные записи связаны с использованием неявного отраслевого стандарта OAuth 2.0 и потоков кода авторизации . Ваш сервис должен поддерживать авторизацию и конечные точки обмена токенами , совместимые с OAuth 2.0.
In the implicit flow, Google opens your authorization endpoint in the user's browser. After successful sign in, you return a long-lived access token to Google. This access token is now included in every request sent from Google.
In the authorization code flow, you need two endpoints:
The authorization endpoint, which presents the sign-in UI to your users that aren't already signed in. The authorization endpoint also creates a short-lived authorization code to record users' consent to the requested access.
The token exchange endpoint, which is responsible for two types of exchanges:
- Exchanges an authorization code for a long-lived refresh token and a short-lived access token. This exchange happens when the user goes through the account linking flow.
- Exchanges a long-lived refresh token for a short-lived access token. This exchange happens when Google needs a new access token because the one it had expired.
Choose an OAuth 2.0 flow
Although the implicit flow is simpler to implement, Google recommends that access tokens issued by the implicit flow never expire. This is because the user is forced to link their account again after a token expires with the implicit flow. If you need token expiration for security reasons, we strongly recommend that you use the authorization code flow instead.
Design guidelines
This section describes the design requirements and recommendations for the user screen that you host for OAuth linking flows. After it's called by Google's app, your platform displays a sign in to Google page and account linking consent screen to the user. The user is directed back to Google's app after giving their consent to link accounts.

Requirements
- You must communicate that the user’s account will be linked to Google, not a specific Google product like Google Home or Google Assistant.
Recommendations
We recommend that you do the following:
Display Google's Privacy Policy. Include a link to Google’s Privacy Policy on the consent screen.
Data to be shared. Use clear and concise language to tell the user what data of theirs Google requires and why.
Clear call-to-action. State a clear call-to-action on your consent screen, such as “Agree and link.” This is because users need to understand what data they're required to share with Google to link their accounts.
Ability to cancel. Provide a way for users to go back or cancel, if they choose not to link.
Clear sign-in process. Ensure that users have clear method for signing in to their Google account, such as fields for their username and password or Sign in with Google.
Ability to unlink. Offer a mechanism for users to unlink, such as a URL to their account settings on your platform. Alternatively, you can include a link to Google Account where users can manage their linked account.
Ability to change user account. Suggest a method for users to switch their account(s). This is especially beneficial if users tend to have multiple accounts.
- If a user must close the consent screen to switch accounts, send a recoverable error to Google so the user can sign in to the desired account with OAuth linking and the implicit flow.
Include your logo. Display your company logo on the consent screen. Use your style guidelines to place your logo. If you wish to also display Google's logo, see Logos and trademarks.

Создать проект
Чтобы создать свой проект для использования привязки аккаунтов:
- Нажмите Создать проект .
- Введите имя или примите предложенное.
- Подтвердите или отредактируйте оставшиеся поля.
- Нажмите «Создать» .
Чтобы просмотреть идентификатор вашего проекта:
- Найдите свой проект в таблице на целевой странице. Идентификатор проекта указан в столбце «Идентификатор» .
Настройте экран согласия OAuth
Процесс привязки аккаунта Google включает в себя экран согласия, на котором пользователи узнают, какое приложение запрашивает доступ к их данным, какие данные запрашиваются и какие условия применяются. Вам необходимо настроить экран согласия OAuth перед генерацией идентификатора клиента API Google.
- Откройте страницу экрана согласия OAuth в консоли API Google.
- При появлении запроса выберите проект, который вы только что создали.
На странице «Экран согласия OAuth» заполните форму и нажмите кнопку «Сохранить».
Название приложения: Название приложения, запрашивающего согласие. Название должно точно отражать ваше приложение и соответствовать названию приложения, которое пользователи видят в других местах. Название приложения будет отображаться на экране согласия на привязку учётной записи.
Логотип приложения: изображение на экране согласия, которое поможет пользователям узнать ваше приложение. Логотип отображается на экране согласия на привязку учётной записи и в настройках учётной записи.
Электронная почта службы поддержки: позволяет пользователям обращаться к вам с вопросами о своем согласии.
Области действия для API Google: Области действия позволяют вашему приложению получать доступ к личным данным пользователя Google. Для привязки аккаунта Google достаточно области действия по умолчанию (адрес электронной почты, профиль, OpenID), добавлять конфиденциальные области действия не нужно. Как правило, рекомендуется запрашивать области действия постепенно, в момент необходимости доступа, а не заранее. Подробнее .
Авторизованные домены: Чтобы защитить вас и ваших пользователей, Google разрешает использовать авторизованные домены только приложениям, использующим OAuth для аутентификации. Ссылки ваших приложений должны размещаться на авторизованных доменах. Подробнее .
Ссылка на домашнюю страницу приложения: домашняя страница вашего приложения. Должна быть размещена на авторизованном домене.
Ссылка на политику конфиденциальности приложения: отображается на экране согласия на привязку аккаунта Google. Должна быть размещена на авторизованном домене.
Ссылка на условия обслуживания приложения (необязательно): должна быть размещена на авторизованном домене.
Рисунок 1. Экран согласия на привязку аккаунта Google для фиктивного приложения Tunery
Проверьте «Статус проверки». Если ваша заявка требует проверки, нажмите кнопку «Отправить на проверку». Подробнее см. в разделе «Требования к проверке OAuth» .
Внедрите свой сервер OAuth
Реализация потока кода авторизации на сервере OAuth 2.0 состоит из двух конечных точек, которые ваша служба делает доступными по HTTPS. Первая конечная точка — это конечная точка авторизации, которая отвечает за поиск или получение согласия пользователей на доступ к данным. Конечная точка авторизации предоставляет пользовательский интерфейс входа вашим пользователям, которые еще не вошли в систему, и записывает согласие на запрошенный доступ. Вторая конечная точка — это конечная точка обмена токенами, которая используется для получения зашифрованных строк, называемых токенами, которые разрешают пользователю доступ к вашей службе.
Когда приложению Google необходимо вызвать один из API вашей службы, Google использует эти конечные точки вместе, чтобы получить от ваших пользователей разрешение на вызов этих API от их имени.
Сеанс потока кода авторизации OAuth 2.0, инициированный Google, имеет следующий процесс:
- Google открывает вашу конечную точку авторизации в браузере пользователя. Если поток для действия начался на голосовом устройстве, Google передает выполнение на телефон.
- Пользователь входит в систему, если он еще не вошел в систему, и предоставляет Google разрешение на доступ к своим данным с помощью вашего API, если он еще не предоставил разрешение.
- Ваш сервис создает код авторизации и возвращает его в Google. Для этого перенаправьте браузер пользователя обратно в Google, указав код авторизации, прикрепленный к запросу.
- Google отправляет код авторизации в конечную точку обмена токенами, которая проверяет подлинность кода и возвращает токен доступа и токен обновления . Токен доступа — это недолговечный токен, который ваша служба принимает в качестве учетных данных для доступа к API. Токен обновления — это долгосрочный токен, который Google может хранить и использовать для получения новых токенов доступа по истечении срока их действия.
- После того как пользователь завершил процесс привязки учетной записи, каждый последующий запрос, отправленный от Google, содержит токен доступа.
Обработка запросов на авторизацию
Когда вам необходимо выполнить привязку учетной записи с использованием потока кода авторизации OAuth 2.0, Google отправляет пользователя в вашу конечную точку авторизации с запросом, который включает следующие параметры:
Параметры конечной точки авторизации | |
---|---|
client_id | Идентификатор клиента, который вы назначили Google. |
redirect_uri | URL-адрес, на который вы отправляете ответ на этот запрос. |
state | Бухгалтерское значение, которое передается обратно в Google без изменений в URI перенаправления. |
scope | Необязательно: набор строк области действия, разделенных пробелами, которые определяют данные, для которых Google запрашивает авторизацию. |
response_type | Тип значения, возвращаемого в ответе. Для потока кода авторизации OAuth 2.0 тип ответа всегда — code . |
user_locale | Языковая настройка учетной записи Google в формате RFC5646 , используемая для локализации вашего контента на предпочитаемом пользователем языке. |
Например, если ваша конечная точка авторизации доступна по адресу https://myservice.example.com/auth
, запрос может выглядеть следующим образом:
GET https://myservice.example.com/auth?client_id=GOOGLE_CLIENT_ID&redirect_uri=REDIRECT_URI&state=STATE_STRING&scope=REQUESTED_SCOPES&response_type=code&user_locale=LOCALE
Чтобы конечная точка авторизации могла обрабатывать запросы на вход, выполните следующие действия:
- Убедитесь, что
client_id
соответствует идентификатору клиента, который вы назначили Google, и чтоredirect_uri
соответствует URL-адресу перенаправления, предоставленному Google для вашей службы. Эти проверки важны для предотвращения предоставления доступа непреднамеренным или неправильно настроенным клиентским приложениям. Если вы поддерживаете несколько потоков OAuth 2.0, также убедитесь, чтоresponse_type
равенcode
. - Проверьте, вошел ли пользователь в ваш сервис. Если пользователь не вошел в систему, завершите процедуру входа или регистрации в вашей службе.
- Создайте код авторизации, который Google будет использовать для доступа к вашему API. Код авторизации может быть любым строковым значением, но он должен однозначно представлять пользователя, клиента, для которого предназначен токен, а также время истечения срока действия кода, и его нельзя угадывать. Обычно вы выдаете коды авторизации, срок действия которых истекает примерно через 10 минут.
- Убедитесь, что URL-адрес, указанный параметром
redirect_uri
, имеет следующую форму:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID https://oauth-redirect-sandbox.googleusercontent.com/r/YOUR_PROJECT_ID
- Перенаправьте браузер пользователя на URL-адрес, указанный параметром
redirect_uri
. Включите только что сгенерированный код авторизации и исходное неизмененное значение состояния при перенаправлении, добавив параметрыcode
иstate
. Ниже приведен пример результирующего URL-адреса:https://oauth-redirect.googleusercontent.com/r/YOUR_PROJECT_ID?code=AUTHORIZATION_CODE&state=STATE_STRING
Обработка запросов на обмен токенов
Конечная точка обмена токенами вашей службы отвечает за два типа обмена токенов:
- Обмен кодами авторизации для токенов доступа и токенов обновления.
- Обмен токенов обновления на токены доступа
Запросы на обмен токенов включают в себя следующие параметры:
Параметры конечной точки обмена токенами | |
---|---|
client_id | Строка, которая идентифицирует источник запроса как Google. Эта строка должна быть зарегистрирована в вашей системе как уникальный идентификатор Google. |
client_secret | Секретная строка, которую вы зарегистрировали в Google для своей службы. |
grant_type | Тип обмениваемого токена. Это либо authorization_code , либо refresh_token . |
code | grant_type=authorization_code , этот параметр представляет собой код, который Google получил либо от вашей конечной точки входа в систему, либо от конечной точки обмена токенами. |
redirect_uri | grant_type=authorization_code , этот параметр представляет собой URL-адрес, используемый в первоначальном запросе авторизации. |
refresh_token | grant_type=refresh_token , этот параметр представляет собой токен обновления, который Google получил от вашей конечной точки обмена токенами. |
Обмен кодами авторизации для токенов доступа и токенов обновления.
После того как пользователь входит в систему и ваша конечная точка авторизации возвращает в Google кратковременный код авторизации, Google отправляет запрос на вашу конечную точку обмена токенами, чтобы обменять код авторизации на токен доступа и токен обновления.
Для этих запросов значение grant_type
— authorization_code
, а значение code
— это значение кода авторизации, который вы ранее предоставили Google. Ниже приведен пример запроса на обмен кода авторизации на токен доступа и токен обновления:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=authorization_code&code=AUTHORIZATION_CODE&redirect_uri=REDIRECT_URI
Чтобы обменять коды авторизации для токена доступа и токена обновления, ваша конечная точка обмена токенами отвечает на запросы POST
, выполняя следующие шаги:
- Убедитесь, что
client_id
идентифицирует источник запроса как авторизованный источник и чтоclient_secret
соответствует ожидаемому значению. - Убедитесь, что код авторизации действителен, срок его действия не истек, а идентификатор клиента, указанный в запросе, соответствует идентификатору клиента, связанному с кодом авторизации.
- Убедитесь, что URL-адрес, указанный в параметре
redirect_uri
, идентичен значению, используемому в первоначальном запросе авторизации. - Если вы не можете проверить все вышеперечисленные критерии, верните ошибку HTTP 400 Bad Request с
{"error": "invalid_grant"}
в качестве тела. - В противном случае используйте идентификатор пользователя из кода авторизации для создания токена обновления и токена доступа. Эти токены могут быть любыми строковыми значениями, но они должны уникальным образом представлять пользователя и клиента, для которых предназначен токен, и их нельзя угадывать. Для токенов доступа также запишите срок действия токена, который обычно составляет час после выдачи токена. Токены обновления не имеют срока действия.
- Верните следующий объект JSON в текст ответа HTTPS:
{ "token_type": "Bearer", "access_token": "ACCESS_TOKEN", "refresh_token": "REFRESH_TOKEN", "expires_in": SECONDS_TO_EXPIRATION }
Google хранит токен доступа и токен обновления для пользователя и записывает срок действия токена доступа. По истечении срока действия токена доступа Google использует токен обновления, чтобы получить новый токен доступа из вашей конечной точки обмена токенами.
Обмен токенов обновления на токены доступа
Когда срок действия токена доступа истекает, Google отправляет запрос на вашу конечную точку обмена токенами, чтобы обменять токен обновления на новый токен доступа.
Для этих запросов grant_type
— refresh_token
, а refresh_token
— это значение токена обновления, который вы ранее предоставили Google. Ниже приведен пример запроса на обмен токена обновления на токен доступа:
POST /token HTTP/1.1 Host: oauth2.example.com Content-Type: application/x-www-form-urlencoded client_id=GOOGLE_CLIENT_ID&client_secret=GOOGLE_CLIENT_SECRET&grant_type=refresh_token&refresh_token=REFRESH_TOKEN
Чтобы обменять токен обновления на токен доступа, ваша конечная точка обмена токенами отвечает на запросы POST
, выполняя следующие шаги:
- Убедитесь, что
client_id
идентифицирует источник запроса как Google и чтоclient_secret
соответствует ожидаемому значению. - Убедитесь, что токен обновления действителен и что идентификатор клиента, указанный в запросе, соответствует идентификатору клиента, связанному с токеном обновления.
- Если вы не можете проверить все вышеперечисленные критерии, верните ошибку HTTP 400 Bad Request с
{"error": "invalid_grant"}
в качестве тела. - В противном случае используйте идентификатор пользователя из токена обновления для создания токена доступа. Эти токены могут быть любыми строковыми значениями, но они должны уникальным образом представлять пользователя и клиента, для которых предназначен токен, и их нельзя угадывать. Для токенов доступа также запишите срок действия токена, обычно через час после выдачи токена.
- Верните следующий объект JSON в текст ответа HTTPS:
{ "token_type": "Bearer", "access_token": " ACCESS_TOKEN ", "expires_in": SECONDS_TO_EXPIRATION }
Обработка запросов информации о пользователях
Конечная точка 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
Необязательно: изображение профиля пользователя.
Проверка вашей реализации
Вы можете проверить свою реализацию с помощью инструмента OAuth 2.0 Playground .
В инструменте выполните следующие действия:
- Нажмите конфигурации» , чтобы открыть окно «Конфигурация OAuth 2.0».
- В поле «Поток OAuth» выберите «Клиентская сторона» .
- В поле «Конечные точки OAuth» выберите «Пользовательский» .
- Укажите конечную точку OAuth 2.0 и идентификатор клиента, который вы назначили Google, в соответствующих полях.
- В разделе «Шаг 1» не выбирайте области действия Google. Вместо этого оставьте это поле пустым или введите область действия, действительную для вашего сервера (или произвольную строку, если вы не используете области действия OAuth). Закончив, нажмите «Авторизовать API» .
- В разделах «Шаг 2» и «Шаг 3» выполните процедуру OAuth 2.0 и убедитесь, что каждый шаг работает должным образом.
Вы можете проверить свою реализацию, используя демонстрационный инструмент привязки учетных записей Google .
В инструменте выполните следующие действия:
- Нажмите кнопку «Войти через Google» .
- Выберите аккаунт, который хотите связать.
- Введите идентификатор услуги.
- При необходимости введите одну или несколько областей, для которых вы запросите доступ.
- Нажмите «Начать демонстрацию» .
- При появлении запроса подтвердите, что вы можете согласиться и отклонить запрос на установление связи.
- Подтвердите, что вы перенаправлены на вашу платформу.