本文档解释了安装在手机、平板电脑和计算机等设备上的应用程序如何使用 Google 的 OAuth 2.0 端点来授权访问 YouTube Analytics API 或 YouTube Reporting API。
OAuth 2.0 允许用户与应用程序共享特定数据,同时保护其用户名、密码和其他信息的私密性。 例如,应用程序可以使用 OAuth 2.0 获取权限来检索频道的 YouTube 分析数据。
安装的应用程序会分发到各个设备上,并且假定这些应用程序无法保守秘密。当用户正在使用应用时,或者当应用在后台运行时,他们都可以访问 Google API。
此授权流程与用于 web 服务器应用程序 的授权流程类似。主要区别在于,已安装的应用必须打开系统浏览器并提供本地重定向 URI 来处理来自 Google 授权服务器的响应。
库和示例
对于 iOS 应用,我们建议使用最新版的 Google 登录 iOS SDK。该 SDK 可处理用户授权,并且比本指南中描述的较低级别协议更易于实现。
对于在不支持系统浏览器或输入功能有限的设备(例如电视、游戏机、相机或打印机)上运行的应用程序,请参阅 OAuth 2.0 for TVs & Devices 或 Sign-In on TVs and Limited Input Devices。
前提条件
为您的项目启用 API
任何调用 Google API 的应用程序都需要在 API Console中启用这些 API。
如需为您的项目启用该 API,请按以下步骤操作:
- Open the API Library 在 Google API Console中。
- If prompted, select a project, or create a new one.
- 使用“库”页面查找并启用 YouTube Analytics API 和 YouTube Reporting API。许多获取 YouTube 分析数据的应用程序也与 YouTube 数据 API 进行交互。找到你的应用程序将要使用的所有其他 API,并启用它们。
创建授权凭据
任何使用 OAuth 2.0 访问 Google API 的应用程序都必须具有授权凭据,以便向 Google 的 OAuth 2.0 服务器识别该应用程序。以下步骤说明如何为您的项目创建凭据。然后,您的应用程序可以使用这些凭据访问您为该项目启用的 API。
- Go to the Clients page.
- 点击创建客户端。
- 以下各节介绍了谷歌授权服务器支持的客户端类型。选择适合您应用程序的客户端类型,为您的 OAuth 客户端命名,并根据需要设置表单中的其他字段。
iOS
- 选择iOS应用类型。
- 输入 OAuth 客户端的名称。此名称将显示在您的项目 Clients page 上,用于识别客户。
- 输入您的应用的捆绑包标识符。捆绑包 ID 是您的应用信息属性列表资源文件 (info.plist) 中 CFBundleIdentifier 键的值。该值最常显示在 Xcode 项目编辑器的“常规”窗格或“签名和功能”窗格中。捆绑包 ID 也显示在 Apple 的 App Store Connect 网站 上应用程序的 App 信息页面的“常规信息”部分中。
确认您为应用使用了正确的软件包 ID,因为如果您使用 App Check 功能,将无法更改该 ID。
- (选修的)
如果您的应用已在苹果应用商店发布,请输入您的应用的 App Store ID。商店 ID 是包含在每个 Apple App Store 网址 中的一个数字字符串。
- 在您的 iOS 或 iPadOS 设备上打开 Apple App Store app。
- 搜索您的应用。
- 选择分享按钮(方形和向上箭头符号)。
- 选择复制链接。
- 将链接粘贴到文本编辑器中。App Store ID 是网址的最后一部分。
示例:
https://apps.apple.com/app/google/id284815942
- (选修的)
请输入您的团队 ID。有关更多信息,请参阅 Apple 开发者账号文档中的 查找您的团队 ID。
注意: 如果您要为客户端启用应用检查,则“团队 ID”字段为必填项。 - (选修的)
为您的 iOS 应用启用应用验证。启用应用验证后,Apple 的 App Attest 服务 将用于验证来自您的 OAuth 客户端的 OAuth 2.0 请求是否真实有效,并且确实来自您的应用。这有助于降低应用被冒充的风险。 了解更多关于为您的 iOS 应用启用 App Check 的信息。
- 点击创建。
UWP
- 选择 Universal Windows Platform 应用类型。
- 请输入 OAuth 客户端的名称。此名称将显示在您的项目 Clients page 上,用于识别客户。
- 输入您的应用的 12 位 Microsoft Store ID。您可以在以下位置找到此值:微软合作伙伴中心在应用身份应用管理部分的页面。
- 点击创建。
对于 UWP 应用,重定向 URI 是通过使用应用的唯一包安全标识符 (SID) 形成的。您可以在 Visual Studio 项目的 Package.appxmanifest 文件中找到应用的 Package SID。
在 Google Cloud 控制台中创建客户端 ID 时,必须使用包 SID 的小写值,并按以下格式指定重定向 URI:
ms-app://YOUR_APP_PACKAGE_SID
对于 UWP 应用,自定义 URI 方案的长度不得超过 39 个字符,如 Microsoft 文档中所述。
确定访问范围
作用域使您的应用程序能够仅请求访问其需要的资源,同时还允许用户控制他们授予您的应用程序的访问权限。因此,请求的范围数量与获得用户同意的可能性之间可能存在反比关系。
在开始实现 OAuth 2.0 授权之前,我们建议您确定应用需要访问权限的范围。
<0x0YouTube Analytics API 使用以下范围:
| 范围 | 说明 |
|---|---|
https://www. |
管理您的 YouTube 账号 |
https://www. |
查看您的 YouTube 账号 |
https://www. |
查看和管理您在 YouTube 上的资源和关联内容 |
https://www. |
查看您的 YouTube 内容的财务类和非财务类 YouTube Analytics 报表 |
https://www. |
查看 YouTube 分析工具为您的 YouTube 内容出具的报告 |
YouTube Reporting API 使用以下范围:
| 范围 | 说明 |
|---|---|
https://www. |
查看您的 YouTube 内容的财务类和非财务类 YouTube Analytics 报表 |
https://www. |
查看 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(推荐) | 代码质询是代码验证器的 Base64网址(无填充)编码 SHA256 哈希值。
|
| plain | 代码质询与上面生成的代码验证器具有相同的值。
|
第 2 步:向 Google 的 OAuth 2.0 服务器发送请求
如需获取用户授权,请向 Google 的授权服务器 (https://accounts.google.com/o/oauth2/v2/auth) 发送请求。此端点用于处理活跃会话查找、对用户进行身份验证,以及征得用户同意。该端点只能通过 SSL 访问,并且会拒绝 HTTP(非 SSL)连接。
对于已安装的应用,授权服务器支持以下查询字符串参数:
| 参数 | |||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
client_id |
必需
应用的客户端 ID。您可以在 Cloud Console Clients page中找到此值。 |
||||||||||||||||||
redirect_uri |
必需
确定 Google 的授权服务器如何向您的应用发送响应。已安装的应用有多种重定向选项可供选择,您在设置授权凭据时会考虑使用哪种重定向方法。 该值必须与 OAuth 2.0 客户端的某个已获授权的重定向 URI 完全一致,您可以在客户端的 Cloud Console中配置该 URI。
Clients page。如果此值与授权 URI 不匹配,您会收到 下表显示了每种方法的相应
|
||||||||||||||||||
response_type |
必需
确定 Google OAuth 2.0 端点是否返回授权代码。 将已安装应用的参数值设置为 |
||||||||||||||||||
scope |
必需
以空格分隔的范围列表,用于标识应用可以代表用户访问的资源。这些值会告知 Google 向用户显示的同意屏幕。 有了这一范围,您不但可以让应用仅请求访问所需的资源,而且还可以让用户控制其向您的应用授予的访问权限大小。因此,所请求的授权范围数量与获得用户同意的可能性之间存在反比关系。 YouTube Analytics API 使用以下范围:
YouTube Reporting API 使用以下范围:
OAuth 2.0 API 范围文档提供了您可能用于访问 Google API 的范围的完整列表。 |
||||||||||||||||||
code_challenge |
建议
指定一个编码后的 |
||||||||||||||||||
code_challenge_method |
建议
指定用于对在授权代码交换期间使用的 |
||||||||||||||||||
state |
建议
指定应用用于在授权请求与授权服务器的响应之间保持状态的任何字符串值。
在用户同意或拒绝您的应用访问请求后,服务器会在 您可以使用此参数实现多种目的,例如将用户引导至应用中的正确资源、发送随机数以及缓解跨站请求伪造问题。由于您的 |
||||||||||||||||||
login_hint |
可选
如果您的应用知道哪个用户正在尝试进行身份验证,则可以使用此参数向 Google 身份验证服务器提供提示。服务器会使用提示来简化登录流程,方法是预填充登录表单中的电子邮件地址字段或选择适当的多重登录会话。 将参数值设置为电子邮件地址或 |
||||||||||||||||||
授权网址示例
下方的标签页显示了不同重定向 URI 选项的授权网址示例。
每个网址都请求访问一个范围,该范围允许访问以检索用户的 YouTube Analytics 报告。这两个网址完全相同,只是 redirect_uri 参数的值不同。这些网址还包含必需的 response_type 和 client_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 政策禁止使用的嵌入式用户代理中。
iOS 和 macOS 开发者在 WKWebView 中打开授权请求时,可能会遇到此错误。
开发者应改用 iOS 库,例如 Google Sign-In for iOS 或 OpenID Foundation 的 AppAuth for iOS。
当 iOS 或 macOS 应用在嵌入式用户代理中打开常规网页链接,并且用户从您的网站导航到 Google 的 OAuth 2.0 授权端点时,Web 开发者可能会遇到此错误。开发者应允许在操作系统(包括 Universal Links 处理程序或默认浏览器应用)的默认链接处理程序中打开常规链接。SFSafariViewController 库也是受支持的选项。
org_internal
相应请求中的 OAuth 客户端 ID 属于一个项目,该项目限制对特定 Google Cloud 组织中的 Google 账号的访问权限。 如需详细了解此配置选项,请参阅“设置 OAuth 权限请求页面”帮助文章中的用户类型部分。
deleted_client
用于发出请求的 OAuth 客户端已被删除。您可以手动删除,也可以在出现未使用的客户端 时自动删除。已删除的客户可以在删除后的 30 天内恢复。 了解详情 。
invalid_grant
如果您使用的是代码验证器和质询,则 code_callenge 参数无效或缺失。确保 code_challenge 参数设置正确。
刷新访问令牌时,令牌可能已过期或失效。 再次验证用户身份,并征得用户同意以获取新令牌。如果您仍然看到此错误,请确保您的应用已正确配置,并且您在请求中使用了正确的令牌和参数。否则,用户账号可能已被删除或停用。
redirect_uri_mismatch
授权请求中传递的 redirect_uri 与 OAuth 客户端 ID 的授权重定向 URI 不匹配。查看 Google Cloud Console
Clients page中的授权重定向 URI。
传递的 redirect_uri 可能对客户端类型无效。
redirect_uri 参数可能指的是已弃用且不再支持的 OAuth 带外 (OOB) 流程。请参考迁移指南更新您的集成。
invalid_request
您提交的请求有误。这可能是由多种原因造成的:
- 请求格式不正确。
- 请求缺少必需参数
- 该请求使用了谷歌不支持的授权方法。请确认您的 OAuth 集成使用了推荐的集成方法。
- 重定向 URI 使用了不受支持的自定义方案。如果您看到错误消息 Android 或 Chrome 应用不支持自定义 URI 方案,了解更多关于自定义 URI 方案的替代方案。
步骤 4:处理 OAuth 2.0 服务器响应
应用程序接收授权响应的方式取决于它使用的 重定向 URI 方案。无论采用何种方案,响应要么包含授权码 (code),要么包含错误信息 (error)。例如,error=access_denied 表示用户拒绝了请求。
如果用户授予您的应用程序访问权限,您可以按照下一步所述,将授权码交换为访问令牌和刷新令牌。
第五步:用授权码交换刷新令牌和访问令牌
要将授权码交换为访问令牌,请调用 https://oauth2.googleapis.com/token 端点并设置以下参数:
| 字段 | |
|---|---|
client_id |
从 Cloud Console Clients page获取的客户端 ID。 |
client_secret |
可选
从 Cloud Console Clients page获取的客户端密钥。 |
code |
从初始请求中返回的授权码。 |
code_verifier |
您在第 1 步中创建的代码验证器。 |
grant_type |
根据 OAuth 2.0 规范中的定义,此字段的值必须设置为 authorization_code。 |
redirect_uri |
您的项目中列出的重定向 URI 之一,位于 Cloud Console
Clients page 中,对应于给定的 client_id。 |
以下代码片段展示了一个示例请求:
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& redirect_uri=http://127.0.0.1:9004& grant_type=authorization_code
Google 对此请求的响应是返回一个 JSON 对象,其中包含一个有效期较短的访问令牌和一个刷新令牌。
响应包含以下字段:
| 字段 | |
|---|---|
access_token |
你的应用发送的用于授权 Google API 请求的令牌。 |
expires_in |
访问令牌的剩余有效期(以秒为单位)。 |
id_token |
注意: 仅当您的请求包含标识范围(例如 openid、profile 或 email)时,才会返回此属性。该值是一个 JSON Web Token (JWT),其中包含有关用户的数字签名身份信息。 |
refresh_token |
可用于获取新访问令牌的令牌。刷新令牌在用户撤销访问权限或刷新令牌过期之前一直有效。 请注意,系统始终会为已安装的应用返回刷新令牌。 |
refresh_token_expires_in |
刷新令牌的剩余有效期(以秒为单位)。仅当用户授予 基于时间的访问权限 时,才会设置此值。 |
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 https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
第 6 步:检查用户授予了哪些范围
当您请求多项权限(范围)时,用户可能不会向您的应用授予对所有这些权限的访问权限。您的应用必须验证实际授予了哪些范围,并妥善处理某些权限被拒绝的情况,通常是通过停用依赖于这些被拒绝范围的功能。
不过,也有例外情况。具有全网域授权的 Google Workspace 企业版应用,或标记为受信任的应用,会绕过精细权限同意页面。对于这些应用,用户不会看到精细的权限同意屏幕。相反,您的应用要么会获得所有请求的范围,要么不会获得任何范围。
如需了解详情,请参阅如何处理精细权限。
如需检查用户是否已向您的应用授予对特定范围的访问权限,请检查访问令牌响应中的 scope 字段。access_token 授予的访问权限范围,以空格分隔且区分大小写的字符串列表表示。
例如,以下示例访问令牌响应表明用户已向您的应用授予对只读云端硬盘活动和日历事件权限的访问权限:
{ "access_token": "1/fFAGRNJru1FTz70BzhT3Zg", "expires_in": 3920, "token_type": "Bearer", "scope": "https://www.googleapis.com/auth/yt-analytics.readonly https://www.googleapis.com/auth/calendar.readonly", "refresh_token": "1//xEoDL4iW3cxlI7yDbSRFYNG01kVKM2C-259HOF2aQbI" }
调用 Google API
应用获得访问令牌后,如果 API 所需的访问范围已获授权,您就可以使用该令牌代表指定的用户账号调用 Google API。为此,请在向 API 发出的请求中添加访问令牌,方法是添加 access_token 查询参数或 Authorization HTTP 标头 Bearer 值。如果可以,最好使用 HTTP 标头,因为查询字符串往往会显示在服务器日志中。在大多数情况下,您可以使用客户端库来设置对 Google API 的调用(例如,调用 YouTube Analytics API 时)。
请注意,YouTube Analytics API 不支持服务账号流程。YouTube Reporting API 仅支持服务账号,且仅适用于拥有和管理多个 YouTube 频道的 YouTube 内容所有者,例如唱片公司和电影制片公司。
您可以在 OAuth 2.0 Playground 中试用所有 Google API 并查看其权限范围。
HTTP GET 示例
使用 Authorization: Bearer HTTP 标头对
reports.query 端点(YouTube Analytics API)的调用可能如下所示。请注意,您需要指定自己的访问令牌:
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获取的客户端密钥。
( |
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& 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 https://www.googleapis.com/auth/calendar.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
自定义 URI 方案是一种深度链接形式,它使用自定义定义的方案来打开您的应用程序。
Chrome 应用中使用自定义 URI 方案的替代方案
使用 Chrome Identity API,它将 OAuth 2.0 响应直接传递给您的应用,无需重定向 URI。
环回 IP 地址(macOS、Linux、Windows 桌面)
要使用此 网址 接收授权码,您的应用程序必须监听本地 Web 服务器。很多平台都支持这种功能,但并非所有平台都支持。但是,如果您的平台支持,这是获取授权码的推荐方法。
当您的应用收到授权响应时,为了获得最佳用户体验,它应该显示一个 HTML 页面来指示用户关闭浏览器并返回您的应用。
| 推荐用法 | macOS、Linux 和 Windows 桌面(但不包括通用 Windows 平台)应用程序 |
| 表单值 | 将应用程序类型设置为 桌面应用程序。 |
手动复制/粘贴(已弃用)
保护您的应用
验证 Chrome 应用的所有权
您可以验证应用的所有权,以降低应用被冒充的风险。
要完成验证过程,您需要使用您的 Chrome 网上应用店开发者账号。 成功通过验证必须满足以下要求:
- 您必须在 Chrome 网上应用商店开发者控制面板 中注册一个项目,该项目的 ID 与您正在完成验证的 Chrome 扩展程序 OAuth 客户端的 ID 相同。
- 您必须是 Chrome 网上应用商店商品的发布者。 了解更多关于 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 后,您将在 OAuth 客户端的修改视图中看到与客户端发出的 OAuth 请求相关的指标。在您强制执行 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 令牌的请求,这些请求可能来自试图冒充您的应用程序的未经身份验证的客户端,或者来自模拟环境。
要强制执行应用检查,请点击 ENFORCE 按钮并确认您的选择。一旦强制执行生效,您客户的所有未经核实的请求都将被拒绝。
注意:启用强制执行后,更改最长可能需要 15 分钟才能生效。
取消 iOS 客户端的应用检查
取消应用检查将停止 强制执行,并允许客户端向 Google OAuth 2.0 端点发出所有请求,包括未经验证的请求。
要取消 iOS 客户端的应用检查,请导航至 iOS 客户端的编辑视图,然后单击 取消检查 按钮并确认您的选择。
注意: 取消强制执行应用检查后,更改最多可能需要 15 分钟才能生效。
禁用 iOS 客户端的应用检查
为应用停用 App Check 将停止所有 App Check 监控和强制执行。考虑改为不强制执行 App Check,以便继续监控客户端的指标。
要禁用 iOS 客户端的 App Check,请导航到 iOS 客户端的编辑视图,然后关闭 使用 Firebase App Check 保护您的 OAuth 客户端免受滥用 开关按钮。
注意:禁用应用检查后,更改最多可能需要 15 分钟才能生效。
基于时间的访问
基于时间的访问权限允许用户在有限的时间内授予您的应用访问其数据的权限,以便完成特定操作。在部分 Google 产品中,用户可在同意流程中启用基于时间的访问权限,从而可以选择授予有限时间段的访问权限。例如, 数据可移植性 API 可以实现一次性数据传输。
当用户授予您的应用程序基于时间的访问权限时,刷新令牌将在指定的持续时间后过期。请注意,在特定情况下,刷新令牌可能会提前失效;详情请参阅这些情况。在 授权码交换响应中返回的 refresh_token_expires_in 字段表示在这种情况下刷新令牌过期前的剩余时间。
延伸阅读
IETF 最佳实践 OAuth 2.0 for Native Apps 确立了此处记录的许多最佳实践。
实施跨账户保护
为了保护用户账号,您还应该采取一个额外的步骤,即利用 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
有关如何实施跨账户保护以及可用事件的完整列表的更多信息,请参阅 使用跨账户保护保护用户账号页面 。