本指南将介绍如何使用服务账号访问 Google Ads API。
服务账号属于您的应用,而不属于个别最终用户。服务账号支持 Web 应用与 Google 服务之间的服务器到服务器交互。您的应用会代表服务账号调用 Google API,因此用户不会直接参与。
服务账号使用的是无需人工授权的 OAuth 2.0 流程,但需使用只有您的应用可访问的密钥文件。
使用服务账号主要有以下两个优势:
Google API 访问权限授权是以配置步骤的形式完成的,因此可以避免与其他 OAuth 2.0 流程相关的复杂问题(需要用户互动)。
OAuth 2.0 断言流程允许您的应用在必要时模拟其他用户。
您可以通过两种方式使用服务账号进行授权:直接授权或通过模拟授权。
使用直接账号访问权限进行授权
在此选项中,您将授予服务账号直接访问您的 Google Ads 账号的权限。
账号访问权限设置
首先,创建服务账号和凭据。
以 JSON 格式下载服务账号密钥,并记下服务账号 ID 和电子邮件地址。
以管理员身份登录您的 Google Ads 账号。依次前往工具和设置 > 设置 > 访问权限和安全。
点击用户标签页下的 + 按钮。
在电子邮件地址输入框中输入服务账号电子邮件地址。选择适当的账号访问权限级别,然后点击添加账号按钮。
该服务账号会被授予访问权限。
客户端库配置
选择与您的编程语言对应的标签页,查看有关如何配置客户端库的说明。
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.com
或mybusiness.com
Google Ads API 开发者令牌;测试账号(可选)
适用于您使用的语言的客户端库
已为 Google Ads API 配置的 Google API 控制台项目
对您要访问的 Google Ads 账号拥有权限的 Google Ads 用户。 Google Ads 不支持在不进行模拟的情况下使用服务账号。
服务账号访问权限设置
由于用户模拟只能在网域级别进行控制,因此服务账号和断言流程与 Google OAuth 2.0 一起使用时,需要您将自己的网域注册到 Google Workspace。然后,您的应用及其用户便可以冒充该网域中的任何用户。
首先,创建服务账号和凭据。
以 JSON 格式下载服务账号密钥,并记下服务账号 ID。
请与您的网域管理员分享服务账号 ID 和 Google Ads API 范围 (
https://www.googleapis.com/auth/adwords
)。请网域管理员向您的服务账号委派全网域授权。
如果您是网域管理员,请按照帮助中心说明操作。
您现在可以通过 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 集。这是一种先发制人的措施,可在服务账号的密钥文件被盗时限制攻击者可以访问的数据量。