身份验证和授权

与其他 Google API 一样,Google Ads API 使用 OAuth 2.0 协议进行身份验证和授权。借助 OAuth 2.0,您的 Google Ads API 客户端应用就能够访问用户的 Google Ads 账号,而无需处理或存储用户的登录信息。

本指南介绍了如何使用三种最常见的 OAuth 2.0 流程为 Google Ads API 身份验证配置 Java 客户端库,并说明了必要的凭据。

如需深入了解 Google Ads API 访问模式,请参阅 Google Ads 访问模式指南

凭证

访问 Google Ads API 需要开发者令牌、OAuth 2.0 凭据,在某些情况下还需要登录客户 ID。

开发者令牌

开发者令牌与经理账号相关联,可以在 Google Ads 网页界面中找到。

虽然开发者令牌与经理账号相关联,但它不会提供对该账号的访问权限。开发者令牌授予对 API 的一般访问权限,而账号级访问权限是通过 OAuth 2.0 配置的。

在客户端库中,开发者令牌由 ads.properties 文件中的 api.googleads.developerToken 键指定。

OAuth 2.0 凭据

如需以有权访问 Google Ads 账号的 Google 账号用户身份进行授权,您必须提供一组 OAuth 2.0 凭据。所需的凭据类型因所用的 OAuth 2.0 流程而异。

该库支持以下三种流程:

  • 服务账号流程
  • 单用户身份验证流程
  • 多用户身份验证流程

如需详细了解 Google Ads API OAuth 流程,请参阅 OAuth 概览,然后按照最符合您需求的流程说明操作,以获取所需的凭据。

登录客户 ID

(可选)指定可访问投放账号的经理账号的客户 ID。如果您通过经理账号访问客户账号,则必须指定此标头。无需指定客户 ID 路径上的所有经理账号,只需指定您用于访问权限的最顶层经理 ID 即可。如需了解详情,请参阅相关文档

在客户端库中,登录客户 ID 由 ads.properties 文件中的 api.googleads.loginCustomerId 键指定。

配置

您可以使用 ads.properties 文件、环境变量或以编程方式配置客户端库。本指南重点介绍如何使用 ads.properties 文件。如需详细了解所有选项,请参阅配置指南

如果使用 ads.properties 文件,请将其放置在主目录中:~/ads.properties

OAuth 工作流

使用 Google Ads API 时有三种常见的工作流程。

服务账号流程

如果您的工作流程不需要任何人工互动,建议采用此工作流程。此工作流程需要一个配置步骤,即用户将服务账号添加到其 Google Ads 账号。然后,该应用可以使用服务账号的凭据来管理用户的 Google Ads 账号。

获得私钥 JSON 文件后,请将以下内容添加到 ads.properties 文件中:

api.googleads.serviceAccountSecretsPath=PRIVATE_KEY_JSON_FILE_PATH
api.googleads.developerToken=INSERT_DEVELOPER_TOKEN_HERE
# Only add this key if you are using impersonation to access an account
# other than the service account itself.
# api.googleads.serviceAccountUser=USER_EMAIL_TO_IMPERSONATE

如需了解详情,请参阅服务账号工作流指南

单用户身份验证流程

如果您无法使用服务账号,则可以使用此工作流。此工作流需要执行两个配置步骤:

  1. 向单个用户授予使用 Google Ads API 管理的所有账号的访问权限。一种常见的方法是向用户提供 Google Ads API 经理账号,并关联该经理账号下的所有 Google Ads 账号。
  2. 用户运行 gcloud 等命令行工具或GenerateUserCredentials 代码示例,以授权您的应用代表其管理其所有 Google Ads 账号。

获得这些凭据后,请将以下内容添加到 ads.properties 文件中:

api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE
api.googleads.developerToken=INSERT_DEVELOPER_TOKEN_HERE

如需了解详情,请参阅单用户身份验证工作流指南

多用户身份验证流程

如果您的应用允许用户登录并授权您的应用代表他们管理其 Google Ads 账号,建议采用此工作流程。GenerateUserCredentials 是一个命令行代码示例,用于说明如何在运行时获取用户身份验证,以便代表用户管理其 Google Ads 账号。您可以参考此代码示例来构建需要用户身份验证的桌面应用。

请将以下内容添加到 ads.properties 文件:

api.googleads.clientId=INSERT_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_REFRESH_TOKEN_HERE
api.googleads.developerToken=INSERT_DEVELOPER_TOKEN_HERE

如需了解详情,请参阅多用户身份验证工作流指南

如果用户管理多个账号,该怎么办?

用户通常会通过直接访问账号或通过 Google Ads 经理账号来管理多个 Google Ads 账号。Java 客户端库提供了以下代码示例,说明了如何处理此类情况。

  1. GetAccountHierarchy 代码示例展示了如何检索 Google Ads 经理账号下的所有账号的列表。
  2. ListAccessibleCustomers 代码示例展示了如何检索用户可以直接访问的所有账号的列表。然后,这些账号可用作LoginCustomerId设置的有效值。

应用默认凭据

Java 客户端库还支持使用应用默认凭据进行身份验证。

这对于本地开发或针对不同的 Google API 进行开发特别有用,因为您可以重复使用相同的凭据,前提是这些凭据可以访问正确的 OAuth 2.0 范围。

对于 Google Ads API,请确保您的应用默认凭据可以访问 https://www.googleapis.com/auth/adwords OAuth 2.0 范围。

如需使用应用默认凭据,请在 ads.properties 文件中将 api.googleads.useApplicationDefaultCredentials 选项设置为 true。使用应用默认凭据时,不应设置客户端 ID、客户端密钥和刷新令牌。