针对移动应用和桌面应用的 OAuth 2.0

本文档介绍了安装在手机、平板电脑和计算机等设备上的应用如何使用 Google 的 OAuth 2.0 端点来授权访问 YouTube Analytics API 或 YouTube Reporting API。

OAuth 2.0 允许用户与应用共享特定数据,同时 用户名、密码和其他隐私信息 例如,应用可以使用 OAuth 2.0 来获取权限 来检索频道的 YouTube 数据分析数据。

已安装的应用会分发到各个设备,并且假定这些应用 不能保守秘密。它们可以在用户使用应用期间或在以下情况下访问 Google API: 应用正在后台运行

此授权流程与 Web 服务器应用。它们的主要区别在于 要求已安装的应用必须打开系统浏览器并提供一个本地重定向 URI 来处理 Google 授权服务器的响应。

替代方案

对于移动应用,您可能希望使用 Google 登录功能: AndroidiOS。Google 登录客户端库可处理身份验证和用户授权,并且实现起来可能比此处介绍的较低级别协议更简单。

对于在不支持系统浏览器或输入功能受限的设备(例如电视、游戏机、摄像头或打印机)上运行的应用,请参阅适用于电视和设备的 OAuth 2.0在电视和输入受限的设备上登录

库和示例

我们建议您使用以下库和示例来帮助您实现本文档中介绍的 OAuth 2.0 流程:

前提条件

为您的项目启用 API

任何调用 Google API 的应用都需要在 API Console中启用这些 API。

如需为您的项目启用该 API,请按以下步骤操作:

  1. Open the API Library 在 Google API Console。
  2. If prompted, select a project, or create a new one.
  3. 使用“库”页面查找并启用 YouTube Analytics API 和 YouTube Reporting API。许多检索 YouTube 数据分析数据的应用程序也与 YouTube 数据 API 连接。找到您的应用将使用的任何其他 API,并将其也启用。

创建授权凭据

任何使用 OAuth 2.0 访问 Google API 的应用都必须具有授权凭据,以向 Google 的 OAuth 2.0 服务器表明应用的身份。以下步骤说明了如何 为项目创建凭据然后,您的应用便可使用这些凭据访问您为该项目启用的 API。

  1. Go to the Credentials page.
  2. 依次点击创建凭据 > OAuth 客户端 ID
  3. 以下部分介绍了 Google 授权服务器支持的客户端类型。为您的 为您的 OAuth 客户端命名,并将表单中的其他字段设置为 适当的选择。
Android
  1. 选择 Android 应用类型。
  2. 输入 OAuth 客户端的名称。此名称会显示在项目的 Credentials page 中,用于标识客户。
  3. 输入您的 Android 应用的软件包名称。该值在 <manifest> 元素的 package 属性
  4. 输入应用分发的 SHA-1 签名证书指纹。
    • 如果您的应用使用 Google Play 应用签名,请从 Play 管理中心的“应用签名”页面复制 SHA-1 指纹。
    • 如果您自行管理密钥库和签名密钥,请使用 keytool 实用程序 以易于用户理解的格式输出证书信息。复制 keytool 输出的 Certificate fingerprints 部分中的 SHA1 值。如需了解详情,请参阅 Google API for Android 文档中的对客户端进行身份验证
  5. (可选)验证您的 Android 应用的所有权。
  6. 点击创建
iOS
  1. 选择 iOS 应用类型。
  2. 输入 OAuth 客户端的名称。此名称会显示在项目的 Credentials page 中,用于标识客户。
  3. 输入应用的软件包标识符。软件包 ID 是 CFBundleIdentifier 键添加到应用的信息属性列表资源文件 (info.plist) 中。值 最常显示在“General”窗格或“Signing &功能窗格的 Xcode 项目编辑器。Apple 的 App Store Connect 网站上,应用的“应用信息”页面中的“一般信息”部分也会显示该软件包 ID。

    请确认您为应用使用了正确的软件包 ID,否则 如果您使用的是 App Check 功能,则可以更改此设置。

  4. (可选)

    如果您的应用已在 Apple 的 App Store 中发布,请输入其 App Store ID。商店 ID 是包含在每个 Apple App Store 网址中的数字字符串。

    1. 打开 Apple App Store 应用
    2. 搜索您的应用。
    3. 选择“分享”按钮(方形和向上箭头符号)。
    4. 选择复制链接
    5. 将链接粘贴到文本编辑器中。App Store ID 是网址的最后一部分。

      示例:https://apps.apple.com/app/google/id284815942

  5. (选填)

    输入您的团队 ID。请参阅 查找您的团队 ID

    注意:如果您要为客户端启用 App Check,则必须填写“团队 ID”字段。
  6. (选填)

    为您的 iOS 应用启用 App Check。启用 App Check 后,Apple 的 App Attest 服务将用于验证源自 OAuth 客户端的 OAuth 2.0 请求是否真实且来自您的应用。这有助于降低应用冒充风险。 详细了解如何启用 App Check 。

  7. 点击创建
UWP
  1. 选择 Universal Windows Platform 应用类型。
  2. 输入 OAuth 客户端的名称。此名称会显示在项目的 Credentials page 中,用于标识客户。
  3. 输入应用的 12 位字符 Microsoft Store ID。您可以在 Microsoft 合作伙伴中心应用身份 “应用管理”部分中的“管理”页面。
  4. 点击创建

对于 UWP 应用,自定义 URI scheme 不得超过 39 个字符。

确定访问权限范围

有了这一范围,您不但可以让应用仅请求访问所需的资源,而且还可以让用户控制其向您的应用授予的访问权限大小。因此,请求的范围数量与获得用户同意的可能性之间可能存在反比关系。

在开始实现 OAuth 2.0 授权之前,我们建议您确定范围 您的应用需要获取访问权限的请求。

YouTube Analytics API 使用以下范围:

范围
https://www.googleapis.com/auth/youtube管理您的YouTube帐户
https://www.googleapis.com/auth/youtube.readonly查看您的YouTube帐户
https://www.googleapis.com/auth/youtubepartner在YouTube上查看和管理您的资产和相关内容
https://www.googleapis.com/auth/yt-analytics-monetary.readonly查看您的YouTube内容的货币和非货币YouTube分析报告
https://www.googleapis.com/auth/yt-analytics.readonly查看有关您的YouTube内容的YouTube分析报告

YouTube Reporting API 使用以下范围:

范围
https://www.googleapis.com/auth/yt-analytics-monetary.readonly查看您的YouTube内容的货币和非货币YouTube分析报告
https://www.googleapis.com/auth/yt-analytics.readonly查看有关YouTube内容的YouTube分析报告

OAuth 2.0 API 范围文档包含您可能用来访问 Google API 的完整范围列表。

获取 OAuth 2.0 访问令牌

以下步骤展示了您的应用如何与 Google 的 OAuth 2.0 服务器交互,以便征得用户同意代表用户执行 API 请求。您的应用必须具有 然后才能执行需要用户授权的 Google API 请求。

第 1 步:生成代码验证程序和验证代码

Google 支持用于代码交换的证明密钥 (PKCE) 协议,以提高已安装应用的流程安全性。对于每个 及其转换后的值(称为“code_challenge”)发送到 授权服务器获取授权代码。

创建代码验证器

code_verifier 是一个高熵加密随机字符串,它使用未预留 字符 [A-Z] / [a-z] / [0-9] /“-”/"."/“_”/“~”,长度至少为 43 个字符 长度上限为 128 个字符。

代码验证程序应具有足够的熵,以使猜测值的不切实际。

创建代码质询

支持通过两种方法创建代码验证。

代码质询生成方法
S256(推荐) 代码质询是代码验证器的 Base64URL(未填充)编码 SHA256 哈希值。
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
plain 代码质询与上方生成的代码验证器的值相同。
code_challenge = code_verifier

第 2 步:向 Google 的 OAuth 2.0 服务器发送请求

如需获取用户授权,请向 Google 的授权服务器 https://accounts.google.com/o/oauth2/v2/auth 发送请求。此端点处理活跃会话查询, 对用户进行身份验证,并征得用户同意。端点只能通过 SSL 访问 拒绝 HTTP(非 SSL)连接。

授权服务器支持安装的以下查询字符串参数 应用:

参数
client_id 必需

应用的客户端 ID。您可以在 API ConsoleCredentials page中找到此值。

redirect_uri 必填

用于确定 Google 的授权服务器如何向您的应用发送响应。已安装的应用有多个重定向选项,您在设置授权凭据时应考虑特定的重定向方法。

此值必须与 OAuth 2.0 客户端的已获授权重定向 URI 之一完全匹配,该 URI 是在客户端的 API ConsoleCredentials page中配置的。如果此值与已获授权的 URI 不匹配,您将收到 redirect_uri_mismatch 错误。

下表显示了适用于当前所用 redirect_uri 参数值的 每个方法:

redirect_uri
自定义 URI scheme com.example.app:redirect_uri_path

com.googleusercontent.apps.123:redirect_uri_path
  • com.example.app 是您控制的网域的反向 DNS 表示法。自定义方案必须包含一个周期才能有效。
  • com.googleusercontent.apps.123 是客户端 ID 的 DNS 反向写法。
  • redirect_uri_path 是可选的路径组件,例如 /oauth2redirect。请注意,路径应以单个 该字符与常规 HTTP 网址不同。
环回 IP 地址 http://127.0.0.1:porthttp://[::1]:port

在您的平台中查询相关的环回 IP 地址并启动 HTTP 一个随机可用端口上的监听器。将 port 替换为应用侦听的实际端口号。

请注意,我们已弃用移动应用上的环回 IP 地址重定向选项的支持。

response_type 必需

确定 Google OAuth 2.0 端点是否返回授权代码。

对于已安装的应用,请将此参数的值设置为 code

scope 必填

以空格分隔的范围列表,用于标识您的应用可以代表用户访问的资源。这些值用于填充 Google 向用户显示的意见征求页面。

范围让您的应用可以仅请求访问所需的资源 同时让用户能够控制他们向您的网页授予 应用。因此,请求的范围数量与获得用户同意的可能性之间存在反比关系。

YouTube Analytics API 使用以下范围:

范围
https://www.googleapis.com/auth/youtube管理您的YouTube帐户
https://www.googleapis.com/auth/youtube.readonly查看您的YouTube帐户
https://www.googleapis.com/auth/youtubepartner在YouTube上查看和管理您的资产和相关内容
https://www.googleapis.com/auth/yt-analytics-monetary.readonly查看您的YouTube内容的货币和非货币YouTube分析报告
https://www.googleapis.com/auth/yt-analytics.readonly查看有关您的YouTube内容的YouTube分析报告

YouTube Reporting API 使用以下作用域:

范围
https://www.googleapis.com/auth/yt-analytics-monetary.readonly查看您的YouTube内容的货币和非货币YouTube分析报告
https://www.googleapis.com/auth/yt-analytics.readonly查看有关YouTube内容的YouTube分析报告

OAuth 2.0 API 范围文档提供了您可能用来访问 Google API 的完整范围列表。

code_challenge 建议

指定一个编码的 code_verifier,该 code_verifier 将在授权代码交换期间用作服务器端质询。请参阅 创建代码 挑战部分了解详情。

code_challenge_method 建议

指定用于对将要使用的 code_verifier 进行编码的方法 在授权代码交换期间发送。此参数必须与 code_challenge 参数。code_challenge_method 的值 如果 plain 未出现在包含 code_challenge。此参数仅支持值 S256plain

state 推荐

指定应用用来维持 授权请求和授权服务器的响应。 在用户同意或拒绝应用的访问请求后,服务器会返回您在 redirect_uri 的网址片段标识符 (#) 中作为 name=value 对发送的确切值。

您可以将此参数用于多种用途,例如将用户定向到应用中的正确资源、发送 Nonce 以及减少跨网站请求伪造。由于您的 redirect_uri 可以被猜到,因此使用 state 值可以更好地确保传入的连接是 身份验证请求。如果您生成随机字符串或对 Cookie 或捕获客户端状态的其他值进行哈希编码,则可以验证响应,以进一步确保请求和响应来自同一浏览器,从而防范跨网站请求伪造等攻击。请参阅 OpenID Connect 关于如何创建和确认 state 令牌的示例的文档。

login_hint 可选

如果您的应用知道哪个用户正在尝试进行身份验证,则可以使用此参数 ,以便向 Google 身份验证服务器提供提示。服务器会使用该提示 简化登录流程:在登录表单中预先填写电子邮件地址字段 选择相应的多登录会话。

将该参数值设为电子邮件地址或 sub 标识符,即 等同于用户的 Google ID。

授权网址示例

以下标签页显示了不同重定向 URI 选项的授权网址示例。

每个网址请求一个范围,该范围允许访问以检索用户 YouTube 数据分析报告。

除了 redirect_uri 参数的值外,这两个网址完全相同。网址 还包含必需的 response_typeclient_id 参数 作为可选的 state 参数。为了便于阅读,每个网址都包含换行符和空格。

自定义 URI scheme

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=com.example.app%3A/oauth2redirect&
 client_id=client_id

环回 IP 地址

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fyt-analytics.readonly&
 response_type=code&
 state=security_token%3D138r5719ru3e1%26url%3Dhttps%3A%2F%2Foauth2.example.com%2Ftoken&
 redirect_uri=http%3A//127.0.0.1%3A9004&
 client_id=client_id

第 3 步:Google 提示用户同意

在此步骤中,用户可决定是否授予您的应用所请求的访问权限。在此阶段,Google 会显示一个意见征求窗口,其中显示应用的名称,以及请求权限来使用用户授权凭据访问的 Google API 服务,以及要授予的访问范围的摘要。通过 然后,用户可以同意授予对您的应用请求的一个或多个范围的访问权限,或者 拒绝请求

在此阶段,您的应用无需进行任何操作,因为它会等待来自 Google 的 OAuth 2.0 服务器,指示是否已授予任何访问权限。该回答在 。

错误

向 Google 的 OAuth 2.0 授权端点发送的请求可能会显示面向用户的错误消息 而不是预期的身份验证和授权流程。常见错误代码和建议 分辨率。

admin_policy_enforced

由于 Google Workspace 管理员的政策,Google 账号无法授权所请求的一个或多个镜重范围。如需详细了解管理员如何限制对所有镜重或敏感和受限镜重范围的访问,直至明确向您的 OAuth 客户端 ID 授予访问权限,请参阅 Google Workspace 管理中心帮助文章控制哪些第三方应用和内部应用可以访问 Google Workspace 数据

disallowed_useragent

授权端点显示在 Google 的 OAuth 2.0 政策所禁止的嵌入式用户代理中。

Android

Android 开发者在以下位置打开授权请求时可能会遇到此错误消息: android.webkit.WebView。 开发者应改为使用 Android 库,例如 Google 登录(适用于 Android)或 OpenID Foundation 的 AppAuth for Android

当 Android 应用在嵌入式用户代理中打开常规网页链接,并且用户从您的网站导航到 Google 的 OAuth 2.0 授权端点时,Web 开发者可能会遇到此错误。开发者应该允许在 操作系统,其中包括 Android App Links 处理程序或默认浏览器应用。通过 Android 自定义标签页 也是一个受支持的选项。

iOS

iOS 和 macOS 开发者在 WKWebView 中打开授权请求时可能会遇到此错误。 开发者应改用 iOS 库,例如 Google 登录(适用于 iOS)或 OpenID Foundation 的 AppAuth(适用于 iOS)

当 iOS 或 macOS 应用在嵌入式用户代理中打开常规网页链接,并且用户从您的网站导航到 Google 的 OAuth 2.0 授权端点时,Web 开发者可能会遇到此错误。开发者应该允许在 操作系统,其中包括 通用链接 处理程序或默认浏览器应用。通过 SFSafariViewController 也是一个受支持的选项。

org_internal

请求中的 OAuth 客户端 ID 属于一个项目,该项目会限制对特定 Google Cloud 组织中的 Google 账号的访问权限。如需详细了解此配置选项,请参阅“设置 OAuth 权限请求页面”帮助文章中的用户类型部分。

invalid_grant

如果您使用的是 代码验证程序和 验证,则 code_callenge 参数无效或缺失。请确保 code_challenge 参数设置正确。

刷新访问令牌时,令牌可能已过期或已失效。 再次对用户进行身份验证,并请求用户同意以获取新令牌。如果您选择继续 请确定您的应用已正确配置, 在请求中使用正确的令牌和参数。否则,该用户账号可能具有 已被删除或停用。

redirect_uri_mismatch

授权请求中传递的 redirect_uri 与 OAuth 客户端 ID 的已获授权的重定向 URI 不匹配。在 Google API Console Credentials page中查看已获授权的重定向 URI。

传递的 redirect_uri 可能对客户端类型无效。

redirect_uri 参数可以是指具有以下特征的 OAuth 带外 (OOB) 流程: 已弃用,不再受支持。请参阅 迁移指南,更新您的 集成。

invalid_request

您提交的请求有问题。造成这种情况的原因有很多:

  • 该请求的格式不正确
  • 请求缺少必需参数
  • 请求使用 Google 不支持的授权方法。验证您的 OAuth 集成使用推荐的集成方法
  • 重定向 URI 使用自定义 scheme:如果您看到错误消息 Chrome 应用不支持自定义 URI scheme未为 Android 客户端启用自定义 URI scheme,则表示您使用的自定义 URI scheme 不受 Chrome 应用支持,并且在 Android 上默认处于停用状态。详细了解自定义 URI scheme 替代方案

第 4 步:处理 OAuth 2.0 服务器响应

应用接收授权响应的方式取决于其使用的重定向 URI 架构。无论采用哪种方案,响应都将包含授权代码 (code) 或错误 (error)。例如,error=access_denied 表示用户拒绝了请求。

如果用户授予对应用的访问权限,您可以将授权代码换成访问令牌和刷新令牌,如下一步所述。

第 5 步:使用授权代码换取刷新令牌和访问令牌

要使用授权代码换取访问令牌,请调用 https://oauth2.googleapis.com/token 端点,并设置以下参数:

字段
client_id 从 API ConsoleCredentials page获取的客户端 ID。
client_secret 从 API ConsoleCredentials page获取的客户端密钥。
code 从初始请求返回的授权代码。
code_verifier 您创建的代码验证程序 第 1 步
grant_type 如 OAuth 2.0 中所定义, 规范,则必须将此字段的值设置为 authorization_code
redirect_uri 为给定 client_id 在 API ConsoleCredentials page 中为您的项目列出的重定向 URI 之一。

以下代码段显示了一个示例请求:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

code=4/P7q7W91a-oMsCeLvIaQm6bTrgtp7&
client_id=your_client_id&
client_secret=your_client_secret&
redirect_uri=http://127.0.0.1:9004&
grant_type=authorization_code

Google 通过返回包含短期访问的 JSON 对象来响应此请求 令牌和刷新令牌

响应包含以下字段:

字段
access_token 您的应用发送的用于授权 Google API 请求的令牌。
expires_in 访问令牌的剩余生命周期(以秒为单位)。
id_token 注意:仅当您的请求包含身份范围时,系统才会返回此属性。 例如 openidprofileemail。该值为 JSON Web 令牌 (JWT),包含 用户。
refresh_token 可用于获取新访问令牌的令牌。刷新令牌在用户撤消访问权限之前有效。 请注意,始终为已安装的应用返回刷新令牌。
scope access_token 授予的访问权限范围,表示为以空格分隔且区分大小写的字符串列表。
token_type 返回的令牌类型。此时,此字段的值始终设置为 Bearer

以下代码段显示了一个示例响应:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "token_type": "Bearer",
  "scope": "https://www.googleapis.com/auth/yt-analytics.readonly",
  "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI"
}

调用 Google API

在您的应用获得访问令牌后,您就可以使用该令牌调用 Google 代表指定的 用户账号(如果已授予 API 所需的访问权限范围)。为此,请通过添加 access_token 查询参数或 Authorization HTTP 标头 Bearer 值,在向 API 发出的请求中添加访问令牌。请尽可能使用 HTTP 标头,因为查询字符串通常会显示在服务器日志中。大多数 可以使用客户端库来设置对 Google API 的调用(例如, 调用 YouTube Analytics API)。

请注意,YouTube Analytics API 不支持该服务账号 。YouTube 报告 API 仅支持拥有和管理多个 YouTube 频道的 YouTube 内容所有者的服务账号,例如唱片公司和电影制片公司。

您可以在 OAuth 2.0 Playground 中试用所有 Google API 并查看其范围。

HTTP GET 示例

reports.query 端点(YouTube Analytics API)使用 Authorization: Bearer HTTP 可能如下所示。请注意,您需要指定自己的访问令牌:

GET /youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views HTTP/1.1
Host: www.googleapis.com
Authorization: Bearer access_token

以下是使用 access_token 查询字符串参数对已验证身份的用户调用同一 API 的示例:

GET https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views

curl 示例

您可以使用 curl 命令行应用测试这些命令。这里有 使用 HTTP 标头选项的示例(首选):

curl -H "Authorization: Bearer access_token" https://www.googleapis.com/youtube/analytics/v1/reports?ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views

或者,您也可以使用查询字符串参数选项:

curl https://www.googleapis.com/youtube/analytics/v1/reports?access_token=access_token&ids=channel%3D%3DMINE&start-date=2016-05-01&end-date=2016-06-30&metrics=views

刷新访问令牌

访问令牌会定期过期,并成为相关 API 请求的无效凭据。如果您请求离线访问与令牌关联的范围,则可以刷新访问令牌,而不提示用户授予权限(包括在用户不存在的情况下)。

如需刷新访问令牌,您的应用会向 Google 的授权服务器 (https://oauth2.googleapis.com/token) 发送包含以下参数的 HTTPS POST 请求:

字段
client_id API Console获取的客户端 ID。
client_secret API Console获取的客户端密钥。 (client_secret 不适用于注册为 Android、iOS 或 Chrome 应用)。
grant_type OAuth 2.0 规范中所述, 此字段的值必须设置为 refresh_token
refresh_token 从授权代码交换返回的刷新令牌。

以下代码段显示了一个示例请求:

POST /token HTTP/1.1
Host: oauth2.googleapis.com
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&
client_secret=your_client_secret&
refresh_token=refresh_token&
grant_type=refresh_token

只要用户未撤消向应用授予的访问权限,令牌服务器就会返回包含新访问令牌的 JSON 对象。以下代码段展示了一个示例 回答:

{
  "access_token": "1/fFAGRNJru1FTz70BzhT3Zg",
  "expires_in": 3920,
  "scope": "https://www.googleapis.com/auth/drive.metadata.readonly",
  "token_type": "Bearer"
}

请注意,发出的刷新令牌有数量限制;每个上限 客户/用户组合,以及另一个针对所有客户端的每位用户。您应该保存刷新令牌 ,只要它们保持有效状态,就可以继续使用。如果您的应用请求的刷新令牌过多,可能会遇到这些限制,在这种情况下,较早的刷新令牌将停止工作。

撤消令牌

在某些情况下,用户可能希望撤消授予应用的访问权限。用户可以撤消访问权限 通过访问 账号设置。请参阅 删除 第三方网站和应用的“网站或应用访问权限”部分有权访问您账号的应用 支持文档。

应用也可以通过编程方式撤消授予其的访问权限。 在用户取消订阅、移除应用或应用所需的 API 资源发生重大变化的情况下,程序化撤消非常重要。也就是说, 移除流程的必要步骤可能包括 API 请求, 授予该应用的权限。

要以编程方式撤销令牌,您的应用会向 https://oauth2.googleapis.com/revoke,并以参数的形式添加令牌:

curl -d -X -POST --header "Content-type:application/x-www-form-urlencoded" \
        https://oauth2.googleapis.com/revoke?token={token}

该令牌可以是访问令牌或刷新令牌。如果令牌是访问令牌,且具有 相应的刷新令牌,相应刷新令牌也会被撤消。

如果成功处理了吊销请求,那么响应的 HTTP 状态代码就是 200。对于错误情况,系统会返回 HTTP 状态代码 400 以及错误代码。

应用重定向方法

自定义 URI scheme(Android、iOS、UWP)

自定义 URI scheme 是一种深层链接形式,它通过自定义 scheme 来打开您的应用。

在 Android 上使用自定义 URI scheme 的替代方案

使用 Android 版 Google 登录 SDK 此方法可将 OAuth 2.0 响应直接发送到您的应用中, 重定向 URI。

如何迁移到 Google Sign-In for Android SDK

如果您在 Android 上使用自定义架构进行 OAuth 集成,则需要完成以下操作才能完全迁移到使用推荐的 Google 登录 for Android SDK:

  1. 更新代码以使用 Google 登录 SDK。
  2. 在 Google API 控制台中停用对自定义架构的支持。

请按照以下步骤迁移到 Google 登录 Android SDK:

  1. 更新您的代码以使用 Google 登录 Android SDK:
    1. 检查您的代码,找出您向 Google 的 OAuth 2.0 服务器发送请求的位置;如果使用自定义 scheme,您的请求将如下所示:
        https://accounts.google.com/o/oauth2/v2/auth?
        scope=<SCOPES>&
        response_type=code&
        &state=<STATE>&
        redirect_uri=com.example.app:/oauth2redirect&
        client_id=<CLIENT_ID>
        
      com.example.app:/oauth2redirect 是上述示例中的自定义 scheme 重定向 URI。如需详细了解自定义 URI 架构值的格式,请参阅 redirect_uri 参数定义。
    2. 记下 scopeclient_id 请求参数, 则需要配置 Google 登录 SDK。
    3. 按照 开始将 Google 登录功能集成到您的 Android 应用中 有关设置 SDK 的说明。您可以跳过 获取后端服务器的 OAuth 2.0 客户端 ID 步骤,就像重复使用一样 您在上一步中检索到的 client_id
    4. 请按照启用服务器端 API 访问中的说明操作。具体步骤如下:
      1. 使用 getServerAuthCode 方法检索 范围。
      2. 将授权代码发送到应用的后端,以换取访问令牌和刷新令牌。
      3. 使用检索到的访问令牌代表用户调用 Google API。
  2. 在 Google API 控制台中停用对自定义架构的支持:
    1. 前往 OAuth 2.0 凭据列表,然后选择您的 Android 客户端。
    2. 转到高级设置部分,取消选中 启用自定义 URI 架构复选框,然后点击保存至 停用自定义 URI scheme 支持。

启用自定义 URI scheme

如果推荐的替代方案不适合您,您可以按照以下说明为 Android 客户端启用自定义 URI scheme:
  1. 前往 OAuth 2.0 凭据列表,然后选择您的 Android 客户端。
  2. 前往高级设置部分,选中启用自定义 URI 架构复选框,然后点击保存以启用自定义 URI 架构支持。

在 Chrome 应用中使用自定义 URI scheme 的替代方法

使用 Chrome Identity API,该 API 会直接将 OAuth 2.0 响应传送到您的应用,从而无需重定向 URI。

环回 IP 地址(macOS、Linux、Windows 桌面设备)

如需使用此网址接收授权代码,您的应用必须监听本地 Web 服务器。许多平台(但并非所有平台)都能做到这一点。但是,如果您的平台 支持,则我们建议使用此机制来获取授权代码。

当您的应用收到授权响应时,为了实现最佳易用性,它应通过显示 HTML 页面来响应,指示用户关闭浏览器并返回您的应用。

推荐用法 macOS、Linux 和 Windows 桌面(但不包括通用 Windows 平台)应用
表单值 将应用类型设置为桌面应用

手动复制/粘贴(已弃用)

保护您的应用

验证应用所有权(Android、Chrome)

您可以验证对应用的所有权,以降低应用被假冒的风险。

Android

为了完成验证流程,您可以使用自己的 Google Play 开发者账号 (如果有的话,并且您的应用已在 Google Play 管理中心。必须满足以下要求才能成功完成验证:

  • 您必须在 Google Play 管理中心内拥有一个注册应用,该应用的软件包名称和 SHA-1 签名证书指纹与您要完成验证的 Android OAuth 客户端相同。
  • 您必须拥有应用的管理员权限 Google Play 管理中心。 了解详情 了解 Google Play 管理中心内的访问权限管理。

在 Android 客户端的验证应用所有权部分中,点击验证所有权按钮以完成验证流程。

如果验证成功,系统会显示一条通知,确认验证成功 验证流程否则,系统会显示错误提示。

如需解决验证失败的问题,请尝试以下操作:

  • 确保您要验证的应用是 Google Play 管理中心内已注册的应用。
  • 确保您在 Google Play 管理中心。
Chrome

若要完成验证流程,请使用您的 Chrome 应用商店开发者账号。 必须满足以下要求才能成功完成验证:

  • 您必须在 Chrome 应用商店开发者信息中心 具有与您要完成的 Chrome 扩展程序 OAuth 客户端相同的产品 ID 验证。
  • 您必须是 Chrome 应用商店商品的发布商。 了解详情 了解 Chrome 应用商店开发者信息中心内的访问权限管理。

在 Chrome 扩展程序客户端的验证应用所有权部分,点击 验证所有权按钮以完成验证流程。

注意:请稍等片刻,然后再完成验证流程。 授予访问您账号的权限。

如果验证成功,系统会显示一条通知,确认验证成功 验证流程否则,系统会显示错误提示。

如需解决验证失败问题,请尝试以下操作:

  • 确保 Chrome 应用商店开发者信息中心内有一个已注册商品,并且该商品的 与您要完成验证的 Chrome 扩展程序 OAuth 客户端相同的产品 ID。
  • 确保您是该应用的发布商,也就是说,您必须是 应用的发布者或群组发布者的成员。 了解详情 了解 Chrome 应用商店开发者信息中心内的访问权限管理。
  • 如果您刚刚更新了您的群组发布者列表,请确认该群组发布者成员资格 列表已在 Chrome 应用商店开发者信息中心内同步。 详细了解如何同步发布商会员名单。

App Check(仅限 iOS)

App Check 功能可使用 Apple 的 App Attest 服务来验证发送到 Google OAuth 2.0 端点的请求是否来自真实的应用,从而帮助保护您的 iOS 应用免遭未经授权的使用。这有助于降低应用冒充的风险。

为 iOS 客户端启用 App Check

必须满足以下要求,才能为您的 iOS 客户端成功启用 App Check:
  • 您必须为 iOS 客户端指定团队 ID。
  • 您不得在软件包 ID 中使用通配符,因为它可以解析为多个应用。这意味着软件包 ID 不得包含星号 (*) 符号。
如需启用 App Check,请在 iOS 客户端的修改视图中开启使用 Firebase App Check 保护您的 OAuth 客户端免遭滥用切换按钮。

启用 App Check 后,您会开始看到与来自您的 该客户端。来自未经验证的来源的请求不会被屏蔽 直到您强制执行 App Check。指标监控页面中的信息可帮助您确定何时开始强制执行。

为 iOS 应用启用 App Check 时,您可能会看到与 App Check 功能相关的错误。接收者 请尝试执行以下操作:

  • 请验证您指定的软件包 ID 和团队 ID 是否有效。
  • 确认您没有为软件包 ID 使用通配符。

为您的 iOS 客户端强制执行 App Check

为应用启用 App Check 并不会自动屏蔽无法识别的请求。如需强制执行此保护措施,请前往 iOS 客户端的“修改”视图。在该页面右侧的 Google Identity for iOS 部分下,您会看到 App Check 指标。这些指标包含以下信息:
  • 已验证请求的数量 - 具有有效 App Check 令牌的请求。在您之后 启用 App Check 强制执行,只有此类别的请求会成功。
  • 未验证请求的数量:可能过时的客户端请求 - 缺少 App Check 令牌的请求;这些请求可能来自未包含 App Check 实现的旧版应用。
  • 未验证请求数:未知来源的请求 - 缺少 App Check 令牌且看起来不像来自您的应用的请求。
  • 未经验证的请求数:无效请求 - App Check 无效的请求 令牌,该令牌可能来自试图冒充您的应用的虚假客户端,或者 模拟环境
查看这些指标,了解强制执行 App Check 对用户有何影响。

如需强制执行应用检查,请点击强制执行按钮,然后确认您的选择。强制执行一次 处于有效状态,来自您客户端的所有未经验证的请求都将被拒绝。

注意:启用强制执行后,更改最长可能需要 15 分钟才能生效。

为 iOS 客户端取消强制执行 App Check

为应用取消强制执行 App Check 后,系统将停止强制执行,并且 将允许从您的客户端向 Google OAuth 2.0 端点发出所有请求(包括未经验证的请求) 请求。

如需为 iOS 客户端停用 App Check,请前往 iOS 客户端的修改视图,点击 UNENFORCE 按钮,然后确认您的选择。

注意:停用应用检查后,所做更改最长可能需要 15 分钟才能生效。

为 iOS 客户端停用 App Check

为应用停用 App Check 会停止所有 App Check 监控和强制执行。不妨考虑停用 App Check,以便继续监控客户端的指标。

如需为 iOS 客户端停用 App Check,请前往 iOS 客户端的修改视图,然后关闭使用 Firebase App Check 保护您的 OAuth 客户端免遭滥用切换按钮。

注意:停用应用检查后,更改最长可能需要 15 分钟才会生效。

延伸阅读

IETF 现行最佳做法 OAuth 2.0 for 原生应用确立了本文中介绍的许多最佳实践。

实施跨账号保护

您应采取的额外措施来保护用户的个账号实现了跨账号功能 利用 Google 的跨账号保护服务进行保护。通过这项服务 订阅安全事件通知,这些通知可向您的应用提供 关于用户账号的重大变化然后,您可以根据自己决定的事件响应方式,使用这些信息来执行操作。

下面列举了 Google 的跨账号保护服务发送到您应用的事件类型:

  • https://schemas.openid.net/secevent/risc/event-type/sessions-revoked
  • https://schemas.openid.net/secevent/oauth/event-type/token-revoked
  • https://schemas.openid.net/secevent/risc/event-type/account-disabled

如需详细了解如何实现跨账号保护功能以及可用事件的完整列表,请参阅使用跨账号保护功能保护用户账号页面。