服务账号

本指南讨论如何使用服务账号访问 Google Ads API。

服务账号属于您的应用,而不属于个别最终用户。服务账号可实现 Web 应用与 Google 服务之间的服务器到服务器交互。您的应用会代表服务账号调用 Google API,因此用户不会直接参与。

服务账号使用的是无需人工授权的 OAuth 2.0 流程,但需使用只有您的应用可访问的密钥文件。

使用服务账号主要有以下两个优势:

  • 对 Google API 访问进行授权是以配置步骤的形式完成的,从而避免了与其他 OAuth 2.0 流程有关的复杂性,因为这些流程需要用户互动。

  • OAuth 2.0 断言流程允许您的应用在必要时模拟其他用户。

您可以通过两种方式使用服务账号进行授权:直接授权或通过模拟授权。

使用直接账号访问权限进行授权

在此选项中,您可向服务账号授予对 Google Ads 账号的直接访问权限。

账号访问权限设置

  1. 首先,创建服务账号和凭据

    以 JSON 格式下载服务账号密钥,并记下服务账号 ID 和电子邮件地址。

  2. 以管理员身份登录您的 Google Ads 账号。依次前往工具和设置 > 设置 > 访问权限和安全

  3. 点击用户标签页下的 + 按钮。

  4. 电子邮件输入框中输入服务账号电子邮件地址。选择相应的账号访问权限级别,然后点击添加账号按钮。请注意,服务账号不支持“仅可接收电子邮件”和“管理员”访问权限级别。

  5. 服务账号会被授予访问权限。

客户端库配置

选择与您的编程语言对应的标签页,了解如何配置客户端库。

Java

在配置中设置私钥 JSON 路径。如果您使用的是 ads.properties 文件,请添加以下内容:

api.googleads.serviceAccountSecretsPath=JSON_KEY_FILE_PATH

如需了解详情,请参阅配置指南

.NET

App.config / Web.config 中配置以下键。如需了解详情,请参阅配置指南

<add key="OAuth2Mode" value="SERVICE_ACCOUNT" />
<add key="OAuth2SecretsJsonPath" value="JSON_KEY_FILE_PATH" />

Python

在配置中设置私钥 JSON 路径。如果您使用的是 google-ads.yaml file、YAML 字符串或 dict,请添加以下内容:

json_key_file_path: JSON_KEY_FILE_PATH

如果您使用的是环境变量,请将以下内容添加到 Bash 配置或环境中:

export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH

PHP

google_ads_php.ini 中配置以下键。如需了解详情,请参阅配置指南

; For service account flow.
jsonKeyFilePath = "JSON_KEY_FILE_PATH"
scopes = "https://www.googleapis.com/auth/adwords"

Ruby

google_ads_config.rb 中配置以下键。

c.keyfile = 'JSON_KEY_FILE_PATH'

Perl

在配置中设置私钥 JSON 路径和委托账号 ID。如果您使用的是 googleads.properties 文件,请添加以下内容:

jsonKeyFilePath=JSON_KEY_FILE_PATH

如果您使用环境变量,请将以下内容添加到您的 Bash 配置或环境中:

export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH

使用模拟进行授权

在此选项中,您可以使用服务账号模拟对您的 Google Ads 账号拥有访问权限的用户。此方法仅适用于 Google Workspace 客户。服务账号只能模拟同一 Google Workspace 中的用户(电子邮件地址)。

前提条件

  • 您拥有的 Google Workspace 网域,例如 mydomain.commybusiness.com

  • Google Ads API 开发者令牌以及(可选的)测试账号

  • 适用于您使用的语言的客户端库

  • 为 Google Ads API 配置的 Google API 控制台项目

  • 对您要访问的 Google Ads 账号拥有权限的 Google Ads 用户。 Google Ads 不支持在不进行模拟的情况下使用服务账号。

服务账号访问权限设置

由于用户模拟仅在网域级别进行控制,因此将服务账号和断言流程与 Google OAuth 2.0 搭配使用需要您在 Google Workspace 中注册自己的网域。然后,您的应用及其用户便可以冒充该网域中的任何用户。

  1. 首先,创建服务账号和凭据

    以 JSON 格式下载服务账号密钥,并记下服务账号 ID。

  2. 与您的网域管理员共享服务账号 ID 和 Google Ads API 范围 (https://www.googleapis.com/auth/adwords)。

    请求网域管理员将全网域授权委派给您的服务账号。

  3. 如果您是网域管理员,请按照帮助中心说明操作。

现在,您就可以使用服务账号通过 OAuth 2.0 断言流程访问自己的 Google Ads 账号。

客户端库配置

选择与您的编程语言对应的标签页,了解如何配置客户端库。

Java

在您的配置中设置私钥 JSON 路径和委托账号 ID。 如果您使用的是 ads.properties 文件,请添加以下内容:

api.googleads.serviceAccountSecretsPath=JSON_KEY_FILE_PATH
api.googleads.serviceAccountUser=IMPERSONATED_EMAIL

如需了解详情,请参阅配置指南

.NET

App.config / Web.config 中配置以下键。如需了解详情,请参阅配置指南。

<add key="OAuth2Mode" value="SERVICE_ACCOUNT" />
<add key="OAuth2SecretsJsonPath" value="JSON_KEY_FILE_PATH" />

<!-- Supply the email address of the user to impersonate. -->
<add key="OAuth2PrnEmail" value="IMPERSONATED_EMAIL" />

Python

在配置中设置私钥 JSON 路径和模拟电子邮件。如果您使用的是 google-ads.yaml file、YAML 字符串或 dict,请添加以下代码:

json_key_file_path: JSON_KEY_FILE_PATH
impersonated_email: IMPERSONATED_EMAIL

如果您使用的是环境变量,请将以下内容添加到 Bash 配置或环境中:

export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH
export GOOGLE_ADS_IMPERSONATED_EMAIL=IMPERSONATED_EMAIL

PHP

google_ads_php.ini 中配置以下键。如需了解详情,请参阅配置指南

; For service account flow.
jsonKeyFilePath = "JSON_KEY_FILE_PATH"
scopes = "https://www.googleapis.com/auth/adwords"
impersonatedEmail = "IMPERSONATED_EMAIL"

Ruby

google_ads_config.rb 中配置以下键。

c.keyfile = 'JSON_KEY_FILE_PATH'
c.impersonate = 'IMPERSONATED_EMAIL'

Perl

在配置中设置私钥 JSON 路径和委托账号 ID。如果您使用的是 googleads.properties 文件,请添加以下内容:

jsonKeyFilePath=JSON_KEY_FILE_PATH
impersonatedEmail=IMPERSONATED_EMAIL

如果您使用的是环境变量,请将以下内容添加到 Bash 配置或环境中:

export GOOGLE_ADS_JSON_KEY_FILE_PATH=JSON_KEY_FILE_PATH
export GOOGLE_ADS_IMPERSONATED_EMAIL=IMPERSONATED_EMAIL

安全考量

由于服务账号对您的 Google Workspace 网域具有网域级委托控制权限,因此请务必妥善保护相关的密钥文件,因为该文件会允许服务账号访问其已获得授权的 Google 服务。因为该服务账号能够模拟网域中的任何用户,所以尤其需要强调这一点。

另一个好的做法是仅允许服务账号访问所需的最低限度的 API 集。这是一种先发制人的措施,可在服务账号的密钥文件已泄露的情况下,限制攻击者访问的数据量。