如需为应用配置 OAuth,您需要设置 OAuth 工作流,并启用 Data Portability API OAuth 范围。
设置 OAuth 工作流
如需为应用设置 OAuth 流程,请按照 Google 身份文档中的基本步骤操作。
大多数开发者使用服务器端 Web 应用流程来征求 OAuth 意见征求,但您也可以使用 JavaScript Web 应用流程或移动和桌面应用流程。
导出操作可能需要的时间会超过访问令牌的有效期,或者用户可以授予 30 天或 180 天的访问权限。您可能需要获取刷新令牌,并定期将其换成新的访问令牌。如需了解详情,请参阅刷新网站应用的访问令牌和刷新移动应用和桌面应用的访问令牌。
重要提示:只有当您的 OAuth 客户端的发布状态为正式版(而非测试)时,用户才能续订 OAuth 令牌。此外,即使您选择 30 天或 180 天的有效期,授予发布状态为测试的 OAuth 客户端的令牌始终会在 7 天后过期。如需了解详情,请参阅设置 OAuth 权限请求页面。
Data Portability API OAuth 范围
为 Data Portability API 应用配置 OAuth 时,请启用与您的应用相关的 Data Portability API OAuth 范围。某些镜重为 sensitive
和 restricted
,需要满足额外的要求。
将 Data Portability API 权限范围添加到 OAuth 流程后,在某些情况下,用户可能会同意授予部分权限范围,但不同意授予所有权限范围。您的应用必须能够通过以下方式处理这些情况:
- 允许导出部分数据
- 通知用户未选择所有必要的范围(并妥善失败)
- 向用户征求其余同意
此外,用户可以选择是一次性授予您对其数据的访问权限,还是授予您 30 天或 180 天的访问权限。
- 如果用户向您授予单次访问权限,您的应用将可以根据该特定同意执行一次数据导出。如需再次下载数据,您需要重新征得用户同意。
- 如果用户向您授予基于时间的访问权限,则您的应用可以在指定时间段内或在用户撤消同意之前执行数据导出操作。
- 您还可以选择对请求应用时间过滤条件,以导出特定时间范围(例如过去 6 个月)的数据。
另请注意,在 OAuth 流程中,您的应用不知道是哪个 Google 账号用于提供同意。您的应用收到的 OAuth 令牌是不可解析的。
如需了解用户如何分享数据,请参阅与第三方分享您的数据。
镜重限制
本部分介绍了导致错误的镜重范围限制。
混合镜重
请求 Data Portability API 范围(例如 https://www.googleapis.com/auth/dataportability.*)时,不能与其他范围(例如 https://www.googleapis.com/auth/userinfo.email)混合使用。以下是一个无效请求示例,其中受限部分已加粗体:
https://accounts.google.com/o/oauth2/v2/auth?
client_id=client_id&
redirect_uri=redirect_uri&
response_type=token&
scope=https://www.googleapis.com/auth/dataportability.myactivity.search+https://www.googleapis.com/auth/userinfo.email&
include_granted_scopes=false
之前授予的范围
在请求 DPAPI 镜重时,切勿设置 include_granted_scopes=true
。以下是一个无效请求示例,其中受限部分已加粗体:
https://accounts.google.com/o/oauth2/v2/auth?
client_id=client_id&
redirect_uri=redirect_uri&
response_type=token&
scope=https://www.googleapis.com/auth/dataportability.myactivity.search&
include_granted_scopes=true
镜重叠过多
如果您的请求附加了过多的镜重,您可能会遇到 400 bad request
错误。如果网址长度超出浏览器支持的上限,就会出现这种情况。如需解决此问题,请将您对镜头范围的请求拆分成多个较小的批次,并使用增量授权为每个批次请求用户同意。
镜重心类别
如需查看 Data Portability API 支持的所有 OAuth 范围及其类别的列表,请参阅可用的 OAuth 范围。如需查看特定服务支持的所有资源组和 OAuth 权限范围的列表,请参阅该服务的架构参考页面。