单用户身份验证工作流

服务账号工作流类似,单用户身份验证流程也利用 Google Ads 界面提供的授权和用户管理功能,向应用授予对所有必要账号的访问权限。此身份验证工作流包含两个步骤:

  • 您向单个用户授予对所有应由应用管理的 Google Ads 账号 的访问权限。
  • 用户授权您的应用代表他们管理其 Google Ads 账号,从而向应用授予对所有 Google Ads 账号的访问权限。

由于只涉及一个用户,因此您可以依赖 gcloud CLIGenerateUserCredential 代码示例等工具,而无需构建自己的 OAuth 2.0 用户身份验证流程。

此工作流的一个相关用例是,当您的账号可以通过少数用户登录(例如 3-4 个用户)进行访问时,与使用 gcloud CLI 等命令行工具为 3-4 个用户获取授权的工作量相比,构建完整的 OAuth 用户身份验证工作流的开发工作量并不合理。

缺点

与服务账号工作流相比,此流程存在以下几个缺点:

  1. 用户身份验证工作流要求您在 Google Cloud 控制台中创建 OAuth 2.0 客户端 ID 和密钥,这比创建服务账号和密钥需要更多的配置步骤。
  2. 您的应用可能必须经过额外的 Google Cloud 应用验证 流程
  3. 如果获得授权的用户离开团队或公司,那么如果您从账号中移除该用户或停用该用户账号,您的应用可能会停止运行。服务账号与个人用户无关,因此可以避免这种风险。
  4. 授权 Google Ads 账号的用户应采取额外的预防措施,例如启用双重身份验证,以防其 Google 账号因安全性差、恶意软件或网络钓鱼而遭到入侵。服务账号不太容易受到此问题的影响,因为其中一些攻击模式并不直接适用于服务账号。

生成凭据

  1. 按照说明为您的应用配置 OAuth 权限请求页面,并将 https://www.googleapis.com/auth/adwords添加为 OAuth 2.0 范围。如需了解详情,请参阅 设置 OAuth 权限请求页面

  2. 按照 说明创建客户端 ID 和客户端密钥。创建 OAuth 2.0 客户端后,请先点击其“下载 OAuth 客户端”图标,然后点击下一屏幕上的“下载 JSON”按钮,下载客户端的 JSON 文件。将该文件另存为 credentials.json

  3. 确定一个用户账号,该账号有权访问您要使用应用管理的所有 Google Ads 账号。如果某些账号缺少访问权限,请按照说明授予必要的访问权限。

  4. 下载并安装 gcloud CLI。安装完成后,请在命令行提示符下运行 gcloud version 命令,验证该工具是否正常运行。输出可能如下所示。

    :~$ gcloud version
    Google Cloud SDK 492.0.0
    alpha 2024.09.06
    beta 2024.09.06
    bq 2.1.8
    bundled-python3-unix 3.11.9
    core 2024.09.06
    enterprise-certificate-proxy 0.3.2
    gcloud-crc32c 1.0.0
    gsutil 5.30
  5. 运行 gcloud CLI 工具,生成 OAuth 2.0 刷新令牌:

    gcloud auth application-default 
    login --scopes=https://www.googleapis.com/auth/adwords,https://www.googleapis.com/auth/cloud-platform
    --client-id-file=<path_to_credentials.json>

    credentials.json 文件来自上一步。

  6. gcloud 命令会在新的浏览器窗口中打开 Google 账号登录窗口,并引导您完成 OAuth 2.0 身份验证步骤。请确保您以在上一步中选择的用户身份登录。如果您的应用 未经验证,您可能会看到 警告屏幕。在这种情况下,您可以安全地点击显示高级 链接,然后点击前往 PROJECT_NAME(未经验证) 选项。

  7. 验证范围后,点击继续 按钮以授予权限。浏览器会转到 https://cloud.google.com/sdk/auth_success,表明身份验证成功。该页面会显示以下消息:

    Authorization code granted. Close this tab.

    gcloud 命令会输出以下消息:

    Credentials saved to file: [/****/.config/gcloud/application_default_credentials.json]

    现在打开 application_default_credentials.json 文件。其内容应与以下内容类似:

    {
    "account": "",
    "client_id": "******.apps.googleusercontent.com",
    "client_secret": "******",
    "refresh_token": "******",
    "type": "authorized_user",
    "universe_domain": "googleapis.com"
    }
    

客户端库配置

选择与您的编程语言对应的标签页,查看有关如何配置客户端库的说明。

Java

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.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

如需了解其他选项,请参阅配置指南

.NET

您可以在运行时初始化 GoogleAdsClient 实例,方法是使用从用户处获得的凭据(您要向其账号发出 API 调用)。

GoogleAdsConfig config = new GoogleAdsConfig()
{
    OAuth2Mode = OAuth2Flow.APPLICATION,
    OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID",
    OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET",
    OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN",
    ...
};
GoogleAdsClient client = new GoogleAdsClient(config);

如需了解其他选项,请参阅配置指南

Python

google-ads.yaml 文件中配置以下键。

client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE

如需了解其他选项,请参阅配置指南

PHP

google_ads_php.ini 中配置以下键。

[GOOGLE_ADS]
loginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE"

[OAUTH2]
clientId = "INSERT_OAUTH2_CLIENT_ID_HERE"
clientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE"
refreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE"

如需了解其他选项,请参阅配置指南

Ruby

在您的 google_ads_config.rb文件中配置以下键。

  Google::Ads::GoogleAds::Config.new do |c|
     c.client_id = 'INSERT_CLIENT_ID_HERE'
     c.client_secret = 'INSERT_CLIENT_SECRET_HERE'
     c.refresh_token = 'INSERT_REFRESH_TOKEN_HERE'
     c.developer_token = 'INSERT_DEVELOPER_TOKEN_HERE'
     c.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
  end

如需了解其他选项,请参阅配置指南

Perl

googleads.properties 文件中配置以下键。

 clientId=INSERT_OAUTH2_CLIENT_ID_HERE
 clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
 refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
 loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE
 

如需了解其他选项,请参阅配置指南

curl

首先,使用 HTTP 客户端提取 OAuth 2.0 访问令牌。本指南使用 curl 命令。

curl \
  --data "grant_type=refresh_token" \
  --data "client_id=CLIENT_ID" \
  --data "client_secret=CLIENT_SECRET" \
  --data "refresh_token=REFRESH_TOKEN" \
  https://www.googleapis.com/oauth2/v3/token

现在,您可以在 API 调用中使用访问令牌。以下示例 展示了如何使用 GoogleAdsService.SearchStream 方法运行广告系列报告,以检索您账号中的 广告系列。本指南未涵盖 报告的详细信息。

curl -i -X POST https://googleads.googleapis.com/v24/customers/CUSTOMER_ID/googleAds:searchStream \
   -H "Content-Type: application/json" \
   -H "Authorization: Bearer ACCESS_TOKEN" \
   -H "developer-token: DEVELOPER_TOKEN" \
   -H "login-customer-id: LOGIN_CUSTOMER_ID" \
   --data-binary "@query.json"

query.json 的内容如下:

{
  "query": "SELECT campaign.id, campaign.name, campaign.network_settings.target_content_network FROM campaign ORDER BY campaign.id"
}