Google OpenID Connect API 参考文档

本页面介绍了 Google 作为 OpenID Connect 提供商的实现,并提供了 Google OIDC 端点的技术参考。OpenID Connect (OIDC) Core 1.0 规范定义了用于对用户进行身份验证和获取身份信息的协议。

此参考文档并非旨在提供有关如何实现 OIDC 的分步说明;如需了解实现详情,请参阅 OpenID Connect 指南。

发现文档

发现文档包含有关 Google 的 OpenID Connect 配置的元数据,如 OpenID Connect Discovery 1.0 规范中所定义。

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

支持的请求方法GET

响应正文

响应字段以 JSON 对象的形式返回,位于 HTTP 响应的正文中,以响应请求者向 https://accounts.google.com/.well-known/openid-configuration 发出的 GET 请求。

字段 类型 说明
issuer string 发卡机构标识符。使用 https 方案的区分大小写的网址。现代值为 https://accounts.google.com;不过,对于旧版实现,也会返回 accounts.google.com
authorization_endpoint string 授权端点的网址。
device_authorization_endpoint string 设备授权端点的网址。
token_endpoint string 令牌端点的网址。
userinfo_endpoint string UserInfo 端点的网址。
revocation_endpoint string 撤消端点的网址。
jwks_uri string JSON Web 密钥集 (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 令牌(声明)

响应中返回的 id_token 值是一个已签名的 JSON Web 令牌 (JWT),必须使用从发现文档中的 jwks_uri 获取的密钥材料进行验证。下表介绍了已解码的 ID 令牌载荷的内容。

声明 类型 说明
iss string 必需。响应发行机构的发行机构标识符。通常为 https://accounts.google.com;不过,对于旧版实现,也会返回 accounts.google.com
sub string 必需。用户的标识符,在所有 Google 账号中必须具有唯一性,并且不得重复使用。Google 账号在不同的时间点可以有多个电子邮件地址,但 sub 值始终保持不变。在应用中使用 sub 作为用户的唯一标识符键。长度上限为 255 个区分大小写的 ASCII 字符。
azp string 授权演示者的客户端标识符,从 Google Cloud 控制台获取。只有当 ID 令牌的请求方与 ID 令牌的受众群体不同时,才需要此声明。
aud string 必需。ID 令牌的目标受众群体。这是您的应用的客户端标识符,可从 Google Cloud 控制台获取。
iat integer 必需。ID 令牌的颁发时间。以 Unix 纪元时间(整数秒数)表示。
exp integer 必需。ID 令牌不得被接受的过期时间(含)。以 Unix 纪元时间(整数秒数)表示。
nonce string 您的应用在身份验证请求中提供的 nonce 的值。您应确保该值只出现一次,以防范重放攻击。
auth_time integer 用户身份验证发生的时间,以 JSON 数字表示自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来经过的秒数。当身份验证请求 claims 参数中包含 auth_time 声明时提供。
at_hash string 访问令牌哈希。提供验证,确保访问令牌与身份令牌相关联。如果 ID 令牌是在服务器流程中发放的,且包含 access_token 值,则始终会包含此声明。
email string 用户的电子邮件地址。仅当您在请求中包含 email 范围时,系统才会提供此字段。此声明的值可能并非此账号独有,并且可能会随时间而变化,因此您不应使用此值作为与用户记录相关联的主标识符。您也不能依赖 email 声明的网域来识别 Google Workspace 或 Cloud 组织的成员;请改用 hd 声明。

警告:请勿使用电子邮件地址作为标识符,因为一个 Google 账号在不同时间点可以有多个电子邮件地址。始终使用 sub 字段作为用户的标识符。
email_verified boolean 如果用户的电子邮件地址已通过验证,则为 True;否则为 false。
name string 用户的全名(采用可显示的形式)。当请求范围包含字符串 profile 或 ID 令牌是从令牌刷新返回时,可能会提供此参数。
picture string 用户个人资料照片的网址。如果请求范围包含字符串 profile,或者 ID 令牌是从令牌刷新返回的,则可能会提供此参数。
given_name string 用户的名字。如果存在 name 声明,则可能会提供。
family_name string 用户的姓氏。如果存在 name 声明,则可能会提供。
hd string 与用户的 Google Workspace 或 Cloud 组织相关联的网域。仅当用户属于 Google Cloud 组织时提供。当您将对资源的访问权限限制为仅限特定网域的成员时,必须检查此声明。如果缺少此声明,则表示相应账号不属于 Google 托管域名。

授权端点

授权端点用于对用户进行身份验证并获取授权代码或令牌。

网址https://accounts.google.com/o/oauth2/v2/auth

支持的请求方法GETPOST

请求参数

参数 类型 是否必需 说明
client_id string 必需 Google Cloud 控制台获取的客户端标识符字符串。
nonce string 可选 由您的应用生成的随机值,用于启用重放保护。仅当请求 ID 令牌时(即当 response_type 包含 id_token 时)才需要此参数。
response_type string 必需 确定要使用的流程。如果值为 code,则启动授权代码流程,需要向令牌端点提供 POST 才能获取令牌。如果值为 tokenid_tokentoken id_tokenid_token token,则启动隐式流,需要在重定向 URI 中使用 JavaScript 从 URI 片段检索令牌。强烈建议不要以任何形式使用 token,因为这会在网址中泄露访问令牌;OAuth 2.1 中禁止使用此值。
response_mode string 可选 指定授权响应的传送方式。如果 response_typecode,则默认值为 query。对于其他响应类型,默认值为 fragment。支持的值:queryfragmentform_post
redirect_uri string 必需 确定响应的发送位置。此参数的值必须与您在 Google Cloud 控制台中设置的某个授权重定向值完全一致(包括 HTTP 或 HTTPS 架构、大小写和末尾的“/”,如果有)。重定向 URI 和已获授权的 JavaScript 来源必须遵循 OAuth 2.0 URI 验证文档中概述的验证规则。
scope string 必需 以空格分隔的无序范围列表。该列表必须包含 openid 值,然后包含 profile 值、email 值或同时包含这两个值。您还可以包含非 OIDC 范围。如果存在 profile 范围值,ID 令牌可能会(但不保证)包含用户的默认 profile 声明。如果存在 email 范围值,则 ID 令牌包含 emailemail_verified 声明。如需了解详情,请参阅 OAuth 2.0 范围
state string 推荐 一种在协议中往返的不透明字符串;也就是说,在授权代码流程中,它作为 URI 参数返回,而在隐式流程中,它作为 URI 片段返回。state 可用于关联请求和响应。由于您的 redirect_uri 可能会被猜到,因此使用 state 值可以提高您对传入连接是由应用发起的身份验证请求的结果的信心。这可以防范跨站请求伪造等攻击。
access_type string 可选 允许的值包括 offlineonline。如果您的应用需要在用户不在浏览器前时刷新访问令牌,请使用 offline。此值是获取返回的刷新令牌所必需的值。
hd string 可选 简化 Google Cloud 组织所拥有账号的登录流程。通过添加 Google Cloud 组织网域(例如 mycollege.edu),您可以指明应针对该网域中的账号优化账号选择界面。如需针对 Google Cloud 组织账号(而非仅针对一个 Google Cloud 组织网域)进行优化,请将值设置为星号 (*):hd=*
login_hint string 可选 当应用知道它要对哪个用户进行身份验证时,它可以将此参数作为提示提供给身份验证服务器。传递此提示会抑制账号选择器,并预先填充登录表单上的电子邮件框或选择适当的会话,这有助于您避免因应用登录错误的用户账号而导致的问题。该值可以是电子邮件地址,也可以是 sub 字符串(相当于用户的 Google ID)。
prompt string 可选 一个以空格分隔的字符串值列表,用于指定授权服务器是否提示用户重新进行身份验证和同意。可能的值:none(无界面)、consent(提示征求同意)、select_account(提示选择账号)。
hl string 可选 用于指定登录界面、账号选择器界面和意见征求界面的显示语言的 BCP 47 语言标记。不建议使用此参数,因为浏览器设置和 Google 账号偏好设置通常更能反映用户的语言偏好。
include_granted_scopes boolean 可选 如果此参数的值为 true,并且授权请求获得批准,则授权将包含之前授予此用户/应用组合的其他范围的任何授权;请参阅增量授权
claims object 可选 claims 参数用于指定要在 UserInfo 响应或 ID 令牌中包含的一个或多个可选字段。如需请求 auth_time 声明,请使用 claims={\"id_token\":{\"auth_time\":{\"essential\":true}}}

响应参数

授权响应通过 HTTP GET 重定向传递到客户端的重定向 URI (redirect_uri)。响应参数会附加到重定向 URI 的查询字符串或网址片段中,具体取决于 response_typeresponse_mode

参数 类型 说明
iss string 发卡机构标识符。根据 RFC 9207,系统始终会返回此参数,并将其设置为 https://accounts.google.com
code string 可用于交换访问令牌和 ID 令牌的授权代码。
state string 与请求中的 state 参数相同的值。
id_token string 包含用户身份信息的 JSON Web 令牌 (JWT)。
access_token string 可发送到 Google API 的访问令牌。
token_type string 返回的令牌类型。始终为 Bearer
expires_in integer 访问令牌的生命周期(以秒为单位),相对于令牌的签发时间。
scope string codeaccess_token 授予的访问权限范围,以空格分隔的区分大小写的字符串列表表示。
error string 如果请求失败,则为错误代码。
error_description string 请求失败时的错误说明。

错误响应

对于授权端点,错误会以查询字符串或网址片段中的参数形式返回给客户端的 redirect_uri,或者以 Google 托管的错误页面的形式向用户显示。

重定向的错误

系统可能会向您的 redirect_uri 返回以下错误代码:

错误 说明
access_denied 用户或授权服务器拒绝了请求。
invalid_request 请求缺少必需的参数、包含无效的参数值、多次包含同一参数,或者格式有误。
unauthorized_client 客户端无权使用此方法请求授权代码。
unsupported_response_type 授权服务器不支持使用此方法获取授权代码。
invalid_scope 所请求的范围无效、未知或格式错误。

面向用户的错误

在某些情况下(例如当 client_idredirect_uri 无效时),授权服务器无法安全地将用户重定向回您的应用。在这些情况下,系统会直接向用户显示错误页面。

错误 说明
admin_policy_enforced 由于 Google Workspace 管理员的政策,相应 Google 账号无法授权一个或多个请求的范围。如需详细了解管理员如何限制访问权限,直到明确向 OAuth 客户端标识符授予访问权限为止,请参阅 Google Workspace 管理员帮助文章
disallowed_useragent 授权端点显示在 Google 的 OAuth 2.0 政策禁止使用的嵌入式用户代理中。
org_internal 请求中的 OAuth 客户端标识符属于一个项目,该项目限制对特定 Google Cloud 组织中的 Google 账号的访问权限。
deleted_client 用于发出请求的 OAuth 客户端已被删除。对于未使用的客户端,可以手动或自动删除。
invalid_grant 使用 PKCE 时,code_challenge 参数无效或缺失。刷新访问令牌或使用增量授权时,令牌可能已过期、失效,或者用户账号可能已被删除或停用。
redirect_uri_mismatch 请求中传递的 redirect_uri 与客户端标识符的授权重定向 URI 不匹配。在 Google Cloud 控制台中查看已获授权的重定向 URI。如果请求使用已弃用的 OAuth 带外 (OOB) 流程,也可能会出现此错误。
invalid_client 发出请求的来源未获得相应客户端的授权,客户端配置不正确,或者 OAuth 客户端密钥不正确。
origin_mismatch 发起授权请求的 JavaScript 的方案、网域和/或端口与为 OAuth 客户端标识符注册的已获授权的 JavaScript 来源 URI 不匹配。在 Google Cloud 控制台中查看已获授权的 JavaScript 来源。
invalid_request 请求存在问题。这可能是因为请求格式有误、缺少必需参数或使用了 Google 不支持的授权方法。

令牌端点

令牌端点用于将授权代码交换为访问令牌和 ID 令牌。

网址https://oauth2.googleapis.com/token

支持的请求方法POST

请求参数(授权代码授予)

参数 类型 是否必需 说明
code string 必需 从授权端点收到的授权代码。
client_id string 必需 Google Cloud 控制台获取的应用的客户端标识符。
client_secret string 必需 Google Cloud 控制台获取的应用的客户端密钥。
redirect_uri string 必需 初始授权请求中使用的重定向 URI。重定向 URI 和已获授权的 JavaScript 来源必须遵循 OAuth 2.0 URI 验证文档中概述的验证规则。
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 必需 必须设置为 OpenID Connect 刷新令牌规范中定义的 refresh_token
refresh_token string 必需 通过授权代码交换返回的刷新令牌。
scope string 可选 以空格分隔的范围列表,其中包含为新访问令牌请求的范围。所请求的范围必须是原始授权请求中授予的范围的子集。

响应正文

响应字段以 JSON 对象的形式返回,位于 HTTP 响应的正文中,以响应请求者向 https://oauth2.googleapis.com/token 发出的 POST 请求。

字段 类型 说明
access_token string 可发送到 Google API 的访问令牌。
expires_in integer 访问令牌的生命周期(以秒为单位),相对于令牌的签发时间。
id_token string 包含用户身份信息的 JSON Web 令牌 (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_idclient_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 Workspace 管理员强制执行的政策,用户无法授权所请求的范围。
org_internal 403 客户端标识符是项目的一部分,该项目限制对特定 Google Cloud 组织的访问权限。

设备授权端点

设备授权端点用于 OAuth 2.0 设备流程,以获取用户代码和验证网址,供输入能力有限的设备使用。

网址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 用户必须在单独的设备上访问的网址,以便输入 user_code 并授予或拒绝您的应用访问权限。
expires_in integer device_codeuser_code 的有效时长(以秒为单位)。
interval integer 设备在轮询请求之间应等待的时长(以秒为单位)。

撤消端点

通过撤消端点,您的应用可以撤消访问令牌或刷新令牌。

网址https://oauth2.googleapis.com/revoke

支持的请求方法POST

请求参数

参数 类型 是否必需 说明
token string 必需 您要撤消的访问令牌或刷新令牌。

响应正文

如果撤消成功,则响应为空的 HTTP 200 OK。如果撤消失败,则会以 JSON 对象的形式返回错误响应。

字段 类型 说明
error string 如果请求失败,则为错误代码。
error_description string 请求失败时的错误说明。

下表介绍了可能的错误代码:

错误 说明
invalid_token 请求中提供的令牌已过期或已被撤消。
invalid_request 请求缺少必需参数、包含无效的参数值,或者格式不正确。

UserInfo 端点

UserInfo 端点会返回经过身份验证的用户的个人资料信息。

网址https://openidconnect.googleapis.com/v1/userinfo

支持的请求方法GETPOST

请求标头

标题 说明
Authorization 必需。必须设置为 Bearer: access_token

响应正文

响应字段以 JSON 对象的形式返回,位于 HTTP 响应的正文中,以响应请求者的 GETPOST 请求 (https://openidconnect.googleapis.com/v1/userinfo)。

字段 类型 说明
sub string 必需。用户的标识符,在所有 Google 账号中必须具有唯一性,并且不得重复使用。区分大小写且不超过 255 个字符的字符串。
name string 用户的全名(采用可显示的形式)。
given_name string 用户的名字。
family_name string 用户的姓氏。
picture string 用户个人资料照片的网址。
email string 用户的电子邮件地址。
email_verified boolean 用户的电子邮件地址是否已通过验证。
hd string 与用户的 Google Workspace 或 Cloud 组织关联的托管网域。

Tokeninfo 端点

tokeninfo 端点是一种 Google 特定的实现,用于验证 ID 令牌以进行调试

网址https://oauth2.googleapis.com/tokeninfo

支持的请求方法GETPOST

请求参数

参数 类型 是否必需 说明
id_token string 必需 要验证的 ID 令牌。

响应正文

响应字段以 JSON 对象的形式返回,位于 HTTP 响应的正文中,以响应请求者的 GETPOST 请求 (https://oauth2.googleapis.com/tokeninfo)。

字段 类型 说明
iss string 发卡机构标识符。始终为 https://accounts.google.com
sub string 用户的标识符,在所有 Google 账号中必须具有唯一性,并且不得重复使用。
aud string ID 令牌的目标受众群体。这是您的应用的客户端标识符,可从 Google Cloud 控制台获取。
iat integer JWT 的签发时间。以自 1970-01-01T0:0:0Z 起的秒数表示(以世界协调时间 [UTC] 为准)。
exp integer ID 令牌的过期时间,在此时间之后,不得接受该令牌进行处理。以自 1970-01-01T0:0:0Z 起的秒数表示(以世界协调时间 [UTC] 为准)。
email string 用户的电子邮件地址。
email_verified string 用户的电子邮件地址是否已通过验证。值是字符串 "true""false"
access_type string 原始授权请求中请求的访问权限类型。
azp string 授权演示者的客户端标识符,从 Google Cloud 控制台获取。
scope string 授予令牌的以空格分隔的范围列表。
alg string 用于对 ID 令牌进行签名的算法。
kid string 用于对 ID 令牌进行签名的密钥 ID。
typ string 令牌的类型。始终为 JWT