Справочник по API Google OpenID Connect

На этой странице описывается реализация Google в качестве поставщика OpenID Connect и приводится техническая справочная информация по конечным точкам OIDC от Google. Спецификация OpenID Connect (OIDC) Core 1.0 определяет протокол для аутентификации пользователей и получения информации об их личности.

Данное руководство не содержит пошаговых инструкций по внедрению OIDC; подробную информацию о внедрении см. в руководстве OpenID Connect .

Документ об обнаружении

Документ Discovery содержит метаданные о конфигурации Google OpenID Connect, как определено в спецификации OpenID Connect Discovery 1.0 .

URL: https://accounts.google.com/.well-known/openid-configuration

Поддерживаемый метод запроса: GET

Ответный текст

Поля ответа возвращаются в виде JSON-объекта в теле HTTP-ответа на GET запрос отправителя по адресу https://accounts.google.com/.well-known/openid-configuration .

Поле Тип Описание
issuer string Идентификатор эмитента. URL-адрес с учетом регистра, использующий схему https . Современное значение — https://accounts.google.com ; однако для устаревших реализаций также возвращается accounts.google.com .
authorization_endpoint string URL-адрес конечной точки авторизации.
device_authorization_endpoint string URL-адрес конечной точки авторизации устройства.
token_endpoint string URL-адрес конечной точки получения токена.
userinfo_endpoint string URL-адрес конечной точки UserInfo.
revocation_endpoint string URL-адрес конечной точки отзыва.
jwks_uri string URL-адрес документа JSON Web Key Set (JWKS).
response_types_supported array Список поддерживаемых значений response_type .
response_modes_supported array Список поддерживаемых значений response_mode .
authorization_response_iss_parameter_supported boolean Логическое значение, указывающее на поддержку RFC 9207 .
subject_types_supported array Список поддерживаемых типов идентификаторов субъектов.
id_token_signing_alg_values_supported array Список поддерживаемых алгоритмов для подписи ID-токена.
scopes_supported array Список поддерживаемых значений области видимости .
claims_supported array Список подтвержденных утверждений.
token_endpoint_auth_methods_supported array Список поддерживаемых методов аутентификации для конечной точки токена.
code_challenge_methods_supported array Список поддерживаемых методов проверки кода для PKCE.
grant_types_supported array Список поддерживаемых типов предоставления прав OAuth 2.0.

Идентификационный токен (для получения информации)

Возвращаемое в ответе значение id_token представляет собой подписанный JSON Web Token (JWT), который необходимо проверить с помощью ключевых данных, полученных из jwks_uri , указанного в документе Discovery Document. В следующей таблице описано содержимое декодированного полезного груза ID Token.

Требовать Тип Описание
iss string Обязательный параметр. Идентификатор отправителя ответа. Обычно это https://accounts.google.com ; однако для устаревших реализаций возвращается и accounts.google.com .
sub string Обязательный параметр. Идентификатор пользователя, уникальный для всех учетных записей Google и никогда не используемый повторно. У одной учетной записи Google может быть несколько адресов электронной почты в разное время, но значение sub никогда не изменяется. Используйте sub в своем приложении в качестве уникального ключа-идентификатора пользователя. Максимальная длина — 255 символов ASCII с учетом регистра.
azp string Идентификатор клиента (Client Identifier) ​​авторизованного докладчика, полученный из консоли Google Cloud . Это поле необходимо только в том случае, если сторона, запрашивающая токен ID, не совпадает с аудиторией токена ID.
aud string Обязательно. Целевая аудитория, для которой предназначен токен ID. Это идентификатор клиента вашего приложения, полученный из консоли Google Cloud .
iat integer Обязательно. Время выдачи ID-токена. Представлено в формате Unix epoch (целое число секунд).
exp integer Обязательно. Срок действия, по истечении которого токен ID не должен быть принят. Представлено в формате Unix epoch time (целые секунды).
nonce string Значение одноразового числа nonce , предоставленного вашим приложением в запросе на аутентификацию. Для защиты от атак повторного воспроизведения следует предоставлять это значение только один раз.
auth_time integer Время, когда произошла аутентификация пользователя, представляет собой число в формате JSON, обозначающее количество секунд, прошедших с момента начала эпохи Unix (1 января 1970 г., 00:00:00 UTC). Предоставляется, если утверждение auth_time включено в параметр claims запроса на аутентификацию.
at_hash string Хэш токена доступа. Обеспечивает проверку связи токена доступа с токеном идентификации. Если токен идентификации выдается со значением access_token в серверном потоке, это утверждение всегда включается.
email string Адрес электронной почты пользователя. Предоставляется только в том случае, если вы указали область действия email в своем запросе. Значение этого утверждения может быть не уникальным для данной учетной записи и может меняться со временем, поэтому не следует использовать это значение в качестве основного идентификатора для связи с вашей записью пользователя. Вы также не можете полагаться на домен утверждения email для идентификации пользователей организаций Google Workspace или Cloud; используйте вместо него утверждение hd .

Внимание: не используйте адрес электронной почты в качестве идентификатора, поскольку у учетной записи Google может быть несколько адресов электронной почты в разное время. Всегда используйте sub в качестве идентификатора пользователя.
email_verified boolean Возвращает true, если адрес электронной почты пользователя подтвержден; в противном случае — false.
name string Полное имя пользователя в отображаемом виде. Может быть предоставлено, если область запроса включала строку profile или если ID-токен возвращается после обновления токена.
picture string URL-адрес изображения профиля пользователя. Может быть предоставлен, если область запроса включала строку profile или если токен ID возвращается после обновления токена.
given_name string Имя пользователя (или имя). Может быть указано, если присутствует поле для ввода name .
family_name string Фамилия пользователя. Может быть указана, если присутствует поле для указания name .
hd string Домен, связанный с организацией Google Workspace или Google Cloud пользователя. Указывается только в том случае, если пользователь принадлежит к организации Google Cloud. Необходимо отметить этот пункт при ограничении доступа к ресурсу только для членов определенных доменов. Отсутствие этого пункта указывает на то, что учетная запись не принадлежит к домену, размещенному в Google.

Конечная точка авторизации

Точка авторизации используется для аутентификации пользователя и получения кода авторизации или токенов.

URL: https://accounts.google.com/o/oauth2/v2/auth

Поддерживаемые методы запроса: GET , POST

Параметры запроса

Параметр Тип Необходимый Описание
client_id string Необходимый Идентификатор клиента (Client Identifier), который вы получаете из консоли Google Cloud .
nonce string Необязательный Случайное значение, сгенерированное вашим приложением, которое включает защиту от повторного воспроизведения. Требуется только при запросе ID-токена (когда response_type включает id_token ).
response_type string Необходимый Определяет используемый поток. Если значение равно code , запускает поток авторизационного кода, требующий POST на конечную точку токена для получения токенов. Если значение равно token , id_token , token id_token или id_token token , запускает неявный поток, требующий использования JavaScript на URI перенаправления для получения токенов из фрагмента URI . Использование token в любой форме крайне не рекомендуется, поскольку это раскрывает токены доступа в URL; это значение запрещено в OAuth 2.1.
response_mode string Необязательный Указывает способ доставки ответа авторизации. Если response_type имеет code , по умолчанию используется query . Для других типов ответов по умолчанию используется fragment . Поддерживаемые значения: query , fragment , form_post .
redirect_uri string Необходимый Определяет, куда отправляется ответ. Значение этого параметра должно точно соответствовать одному из разрешенных значений перенаправления, которые вы установили в консоли Google Cloud (включая схему HTTP или HTTPS, регистр и завершающий символ '/', если таковой имеется). URI перенаправления и разрешенные источники JavaScript должны соответствовать правилам проверки, изложенным в документации по проверке URI OAuth 2.0 .
scope string Необходимый Список областей действия (scopes), разделенных пробелами и неупорядоченных. Список должен включать значение openid , а затем значение profile , значение email или оба значения. Вы также можете включить области действия, не относящиеся к OIDC. Если присутствует значение области действия profile , токен ID может (но это не гарантируется) включать утверждения profile пользователя по умолчанию. Если присутствует значение области действия email , токен ID включает утверждения email и email_verified . Для получения дополнительной информации см. раздел «Области действия OAuth 2.0» .
state string Рекомендуется Непрозрачная строка, передаваемая по протоколу туда и обратно; то есть она возвращается в качестве параметра URI в потоке кода авторизации и в фрагменте URI в неявном потоке. state может быть полезно для сопоставления запросов и ответов. Поскольку ваш redirect_uri может быть угадан, использование значения state может повысить вашу уверенность в том, что входящее соединение является результатом запроса аутентификации, инициированного вашим приложением. Это обеспечивает защиту от таких атак, как подделка межсайтовых запросов (CSS).
access_type string Необязательный Допустимые значения: offline и online . Если вашему приложению необходимо обновлять токены доступа, когда пользователь отсутствует в браузере, используйте значение offline . Это значение необходимо для получения токена обновления.
hd string Необязательный Оптимизируйте процесс входа в систему для учетных записей, принадлежащих организации Google Cloud. Указав домен организации Google Cloud (например, mycollege.edu ), вы можете указать, что интерфейс выбора учетной записи должен быть оптимизирован для учетных записей этого домена. Чтобы оптимизировать процесс для учетных записей организации Google Cloud в целом, а не только для одного домена организации Google Cloud, установите значение звездочки ( * ): hd=* .
login_hint string Необязательный Когда ваше приложение знает, какого пользователя оно пытается аутентифицировать, оно может передать этот параметр в качестве подсказки серверу аутентификации. Передача этой подсказки подавляет выбор учетной записи и либо автоматически заполняет поле электронной почты в форме входа, либо выбирает правильную сессию, что может помочь избежать проблем, возникающих, если ваше приложение входит в систему под неправильной учетной записью пользователя. Значением может быть либо адрес электронной почты, либо sub , эквивалентная идентификатору Google пользователя.
prompt string Необязательный Список строковых значений, разделенных пробелами, указывающий, запрашивает ли сервер авторизации у пользователя повторную аутентификацию и согласие. Возможные значения: none (нет интерфейса), consent (запрашивает согласие), select_account (запрашивает выбор учетной записи).
hl string Необязательный Языковой тег BCP 47 , используемый для указания языка отображения на экранах входа в систему, выбора учетной записи и согласия. Использование этого параметра не рекомендуется, поскольку настройки браузера и параметры учетной записи Google обычно лучше отражают языковые предпочтения пользователя.
include_granted_scopes boolean Необязательный Если этому параметру присвоено значение true , и запрос на авторизацию одобрен, авторизация будет включать любые предыдущие авторизации, предоставленные данной комбинации пользователь/приложение для других областей действия; см. Инкрементальная авторизация .
claims object Необязательный Параметр claims используется для указания одного или нескольких необязательных полей, которые следует включить в ответ UserInfo или ID Token. Чтобы запросить поле auth_time , используйте claims={\"id_token\":{\"auth_time\":{\"essential\":true}}} .

Параметры отклика

Ответ авторизации доставляется на URI перенаправления клиента ( redirect_uri ) с использованием HTTP GET перенаправления. Параметры ответа добавляются к URI перенаправления в строке запроса или фрагменте URL, в зависимости от response_type и response_mode .

Параметр Тип Описание
iss string Идентификатор эмитента. В соответствии с RFC 9207 этот параметр всегда возвращается и устанавливается в значение https://accounts.google.com .
code string Код авторизации, который можно обменять на токен доступа и идентификационный токен.
state string То же значение, что и у параметра state из запроса.
id_token string JSON Web Token (JWT), содержащий идентификационную информацию о пользователе.
access_token string Токен доступа, который можно отправить в API Google.
token_type string Тип возвращаемого токена. Всегда Bearer .
expires_in integer Время жизни токена доступа в секундах относительно времени его выдачи.
scope string Области доступа, предоставляемые code или access_token выражены в виде списка строк, разделенных пробелами и чувствительных к регистру.
error string Код ошибки, если запрос не удался.
error_description string Описание ошибки в случае сбоя запроса.

Ответы об ошибках

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

Перенаправленные ошибки

В адрес redirect_uri могут быть возвращены следующие коды ошибок:

Ошибка Описание
access_denied Пользователь или сервер авторизации отклонили запрос.
invalid_request В запросе отсутствует обязательный параметр, содержится недопустимое значение параметра, параметр указан более одного раза или он имеет другой некорректный формат.
unauthorized_client Клиент не имеет права запрашивать код авторизации этим методом.
unsupported_response_type Сервер авторизации не поддерживает получение кода авторизации этим методом.
invalid_scope Запрошенная область видимости недействительна, неизвестна или имеет неправильный формат.

Ошибки, с которыми сталкиваются пользователи.

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

Ошибка Описание
admin_policy_enforced Учетная запись Google не может авторизовать одну или несколько запрошенных областей доступа из-за правил администратора Google Workspace. Дополнительную информацию о том, как администратор может ограничить доступ до тех пор, пока доступ не будет явно предоставлен вашему идентификатору клиента OAuth, см. в справочной статье администратора Google Workspace .
disallowed_useragent Точка авторизации отображается внутри встроенного пользовательского агента, что запрещено политикой Google OAuth 2.0 .
org_internal Идентификатор клиента OAuth в запросе является частью проекта, ограничивающего доступ к учетным записям Google в конкретной организации Google Cloud .
deleted_client Клиент OAuth, использованный для отправки запроса, был удален. Удаление может происходить вручную или автоматически в случае неиспользуемых клиентов .
invalid_grant Параметр code_challenge недействителен или отсутствует при использовании PKCE. При обновлении токена доступа или использовании инкрементальной авторизации токен мог истечь, быть аннулирован, а учетная запись пользователя могла быть удалена или отключена.
redirect_uri_mismatch Передаваемый в запросе параметр redirect_uri не соответствует авторизованному URI перенаправления для идентификатора клиента. Проверьте авторизованные URI перенаправления в консоли Google Cloud . Эта ошибка также может возникнуть, если запрос использует устаревший внеполосный поток OAuth (OOB).
invalid_client Источник, с которого был отправлен запрос, не авторизован для данного клиента, конфигурация клиента некорректна или секретный ключ клиента OAuth неверен.
origin_mismatch Схема, домен и/или порт JavaScript-кода, инициирующего запрос авторизации, не соответствуют авторизованному URI источника JavaScript, зарегистрированному для идентификатора клиента OAuth. Проверьте авторизованные источники JavaScript в консоли Google Cloud .
invalid_request В запросе возникла ошибка. Это может быть связано с некорректным форматом запроса, отсутствием необходимых параметров или использованием метода авторизации, который Google не поддерживает.

Конечная точка токена

Конечная точка Token используется для обмена кода авторизации на токен доступа и идентификационный токен.

URL: https://oauth2.googleapis.com/token

Поддерживаемый метод запроса: POST

Параметры запроса (предоставление кода авторизации)

Параметр Тип Необходимый Описание
code string Необходимый Код авторизации, полученный от точки авторизации.
client_id string Необходимый Идентификатор клиента для вашего приложения, полученный из консоли Google Cloud .
client_secret string Необходимый Секретный ключ клиента для вашего приложения, полученный из консоли Google Cloud .
redirect_uri string Необходимый URI перенаправления, используемый в первоначальном запросе авторизации. URI перенаправления и авторизованные источники JavaScript должны соответствовать правилам проверки, изложенным в документации по проверке URI OAuth 2.0 .
grant_type string Необходимый Необходимо установить значение authorization_code .

Параметры запроса (поток работы устройства)

Параметр Тип Необходимый Описание
client_id string Необходимый Идентификатор клиента для вашего приложения, полученный из консоли Google Cloud .
client_secret string Необходимый Секретный ключ клиента для вашего приложения, полученный из консоли Google Cloud .
device_code string Необходимый Код device_code , возвращаемый конечной точкой авторизации устройства.
grant_type string Необходимый Необходимо установить значение urn:ietf:params:oauth:grant-type:device_code .

Параметры запроса (Обновление токена доступа)

Параметр Тип Необходимый Описание
client_id string Необходимый Идентификатор клиента для вашего приложения, полученный из консоли Google Cloud .
client_secret string Необходимый Секретный ключ клиента для вашего приложения, полученный из консоли Google Cloud .
grant_type string Необходимый Необходимо установить значение refresh_token как определено в спецификации OpenID Connect Refresh Tokens .
refresh_token string Необходимый Токен обновления, полученный в результате обмена кодами авторизации.
scope string Необязательный Список областей действия, разделенных пробелами, запрашиваемых для нового токена доступа. Запрашиваемые области действия должны являться подмножеством областей действия, предоставленных в исходном запросе на авторизацию.

Ответный текст

Поля ответа возвращаются в виде JSON-объекта в теле HTTP-ответа на POST запрос отправителя по адресу https://oauth2.googleapis.com/token .

Поле Тип Описание
access_token string Токен доступа, который можно отправить в API Google.
expires_in integer Время жизни токена доступа в секундах относительно времени его выдачи.
id_token string JSON Web Token (JWT), содержащий идентификационную информацию о пользователе. Этот токен возвращается при первоначальном обмене кодом авторизации, а также может быть возвращен при запросе обновления токена, если была предоставлена ​​область действия openid .
scope string Области доступа, предоставляемые access_token выражены в виде списка строк, разделенных пробелами и чувствительных к регистру.
token_type string Тип возвращаемого токена. Всегда Bearer .
refresh_token string (Необязательно) Токен, который можно использовать для получения новых токенов доступа. Это поле возвращается только при первоначальном обмене кодом авторизации, если был запрошен access_type=offline .
refresh_token_expires_in integer (Необязательно) Оставшийся срок действия токена обновления в секундах. Это значение устанавливается только в том случае, если пользователь предоставляет доступ по времени .

Ответы об ошибках

Если запрос не удается, сервер авторизации возвращает JSON-объект со следующими полями:

Поле Тип Описание
error string Код ошибки.
error_description string Описание ошибки в случае сбоя запроса.

В таблице ниже описаны возможные коды ошибок и соответствующие им коды состояния HTTP:

Ошибка Код состояния HTTP Описание
invalid_request 400 В запросе отсутствует обязательный параметр, содержится недопустимое значение параметра или он имеет другой некорректный формат.
invalid_client 401 Аутентификация клиента не удалась. Например, неверны значения client_id или client_secret , или указан неверный тип клиента.
invalid_grant 400 Предоставленный код авторизации, токен обновления или код устройства недействителен, просрочен, отозван или не соответствует URI перенаправления, использованному в запросе авторизации.
unauthorized_client 400 Аутентифицированный клиент не имеет права использовать данный тип авторизации.
unsupported_grant_type 400 Тип предоставления авторизации не поддерживается сервером авторизации.
invalid_scope 400 Запрошенная область видимости недействительна, неизвестна или имеет неправильный формат.
authorization_pending 428 (Процесс авторизации устройства) Пользователь еще не завершил процесс авторизации.
slow_down 429 (Схема работы устройства) Устройство отправляет запросы на опрос слишком часто.
access_denied 403 (Схема работы устройства) Пользователь отказал в предоставлении доступа к устройству.
expired_token 400 (Последовательность действий устройства) Срок device_code истек.
admin_policy_enforced 400 Пользователь не может авторизовать запрошенные области доступа из-за правил, установленных администратором его рабочего пространства Google.
org_internal 403 Идентификатор клиента является частью проекта, ограничивающего доступ к определенной организации Google Cloud.

Конечная точка авторизации устройства

В потоке авторизации устройств OAuth 2.0 конечная точка авторизации используется для получения кода пользователя и URL-адреса подтверждения для устройств с ограниченными возможностями ввода.

URL: https://oauth2.googleapis.com/device/code

Поддерживаемый метод запроса: POST

Параметры запроса

Параметр Тип Необходимый Описание
client_id string Необходимый Идентификатор клиента для вашего приложения, полученный из консоли Google Cloud .
scope string Необходимый Разделённый пробелами список областей действия, определяющих ресурсы, к которым ваше приложение может получить доступ от имени пользователя.

Ответный текст

В ответе будет получен JSON-объект, содержащий следующие поля:

Поле Тип Описание
device_code string Значение, которое Google однозначно присваивает для идентификации устройства, на котором запущено приложение, запрашивающее авторизацию.
user_code string Значение с учетом регистра, которое идентифицирует для Google области доступа, к которым запрашивает приложение. Ваш пользовательский интерфейс предложит пользователю ввести это значение на отдельном устройстве с более широкими возможностями ввода.
verification_url string URL-адрес, по которому пользователь должен перейти на другом устройстве, чтобы ввести user_code и предоставить или отказать в доступе к вашему приложению.
expires_in integer Продолжительность времени в секундах, в течение которого device_code и user_code остаются действительными.
interval integer Продолжительность времени в секундах, в течение которого ваше устройство должно ожидать между запросами на опрос.

Конечная точка отзыва

Конечная точка отзыва позволяет вашему приложению отзывать токен доступа или токен обновления.

URL: https://oauth2.googleapis.com/revoke

Поддерживаемый метод запроса: POST

Параметры запроса

Параметр Тип Необходимый Описание
token string Необходимый Токен доступа или токен обновления, который вы хотите отозвать.

Ответный текст

Если аннулирование прошло успешно, в ответ приходит пустой HTTP-код 200 OK . Если аннулирование не удалось, возвращается сообщение об ошибке в виде JSON-объекта.

Поле Тип Описание
error string Код ошибки, если запрос не удался.
error_description string Описание ошибки в случае сбоя запроса.

В таблице ниже описаны возможные коды ошибок:

Ошибка Описание
invalid_token Предоставленный в запросе токен уже просрочен или отозван.
invalid_request В запросе отсутствует обязательный параметр, содержится недопустимое значение параметра или он имеет другой некорректный формат.

Конечная точка UserInfo

Конечная точка UserInfo возвращает информацию о профиле аутентифицированного пользователя.

URL: https://openidconnect.googleapis.com/v1/userinfo

Поддерживаемые методы запроса: GET , POST

Заголовки запроса

Заголовок Описание
Authorization Обязательно. Необходимо установить значение Bearer: access_token .

Ответный текст

Поля ответа возвращаются в виде JSON-объекта в теле HTTP-ответа на GET или POST запрос отправителя по адресу https://openidconnect.googleapis.com/v1/userinfo .

Поле Тип Описание
sub string Обязательный параметр. Идентификатор пользователя, уникальный для всех учетных записей Google и никогда не используемый повторно. Строка с учетом регистра, не превышающая 255 символов.
name string Полное имя пользователя в отображаемом виде.
given_name string Имя пользователя (или имя).
family_name string Фамилия пользователя.
picture string URL-адрес фотографии профиля пользователя.
email string Адрес электронной почты пользователя.
email_verified boolean Проверен ли адрес электронной почты пользователя.
hd string Домен, размещенный в Google Workspace или облачной среде пользователя.

Конечная точка Tokeninfo

Конечная точка tokeninfo — это реализация, разработанная специально для Google и используемая для проверки идентификационного токена в целях отладки .

URL: https://oauth2.googleapis.com/tokeninfo

Поддерживаемые методы запроса: GET , POST

Параметры запроса

Параметр Тип Необходимый Описание
id_token string Необходимый Идентификационный токен для проверки.

Ответный текст

Поля ответа возвращаются в виде JSON-объекта в теле HTTP-ответа на GET или POST запрос отправителя по адресу https://oauth2.googleapis.com/tokeninfo .

Поле Тип Описание
iss string Идентификатор эмитента. Всегда https://accounts.google.com .
sub string Идентификатор пользователя, уникальный для всех учетных записей Google и никогда не используемый повторно.
aud string Целевая аудитория, для которой предназначен идентификационный токен. Это идентификатор клиента вашего приложения, полученный из консоли Google Cloud .
iat integer Время выпуска JWT. Представлено в секундах от 1 января 1970 г., 0:0:0Z, измеренных по UTC.
exp integer Срок действия, по истечении которого идентификационный токен не должен быть принят к обработке. Выражается в секундах с 1970-01-01T0:0:0Z по UTC.
email string Адрес электронной почты пользователя.
email_verified string Проверен ли адрес электронной почты пользователя. Значение — строка "true" или "false" .
access_type string Тип доступа, запрошенный в исходном запросе на авторизацию.
azp string Идентификатор клиента авторизованного докладчика, полученный из консоли Google Cloud .
scope string Разделённый пробелами список областей действия , предоставленных токену.
alg string Алгоритм, используемый для подписи идентификационного токена.
kid string Идентификатор ключа, используемый для подписи токена идентификации.
typ string Тип токена. Всегда JWT .