本指南讨论如何使用服务账号访问 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 集。这是一种先发制人的措施,可在服务账号的密钥文件已泄露的情况下,限制攻击者访问的数据量。