多用户身份验证工作流

在多用户身份验证工作流中,您需要构建自己的 OAuth 流程来验证用户身份。Google Identity 文档中讨论了多种应用类型,以及支持每种应用类型所需的 Google Cloud 控制台项目配置。Google Ads API 支持所有这些应用类型。另请注意以下技术细节:

  1. 将应用配置为请求以下 OAuth 2.0 范围:

    https://www.googleapis.com/auth/adwords
    
  2. 您的应用可能需要在用户离线时代表用户进行 API 调用。一种常见的情况是离线下载账号指标,以生成报告并执行账号分析。因此,我们建议请求 OAuth 离线访问权限。

  3. 完成 OAuth 应用验证流程,以验证您的应用。

工作流程概览

实现多用户身份验证工作流程主要涉及以下三个步骤:

  1. 将用户直接引导至 OAuth 权限请求页面:将每位用户重定向至 Google 的 OAuth 2.0 授权端点,请求 https://www.googleapis.com/auth/adwords 权限范围和离线访问权限。
  2. 将授权代码换成令牌:在用户授予权限后,捕获返回的授权代码,并将其换成访问令牌和刷新令牌。
  3. 在运行时存储令牌并初始化客户端:在数据存储区中安全地存储每个用户的刷新令牌,并在运行时初始化 GoogleAdsClient 实例时传递用户的凭据。

客户端库配置

在对用户进行授权并获取 OAuth 2.0 凭据后,您可以按照与您的编程语言对应的标签页中的说明配置客户端库。

Java

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

UserCredentials credentials =
    UserCredentials.newBuilder()
        .setClientId("INSERT_OAUTH2_CLIENT_ID_HERE")
        .setClientSecret("INSERT_OAUTH2_CLIENT_SECRET_HERE")
        .setRefreshToken("INSERT_OAUTH2_REFRESH_TOKEN_HERE")
        .build();

// Creates a GoogleAdsClient with the provided credentials.
GoogleAdsClient client =
    GoogleAdsClient.newBuilder()
        // Sets the OAuth credentials which provide Google Ads account
        // access.
        .setCredentials(credentials)
        // Optional: sets the login customer ID.
        .setLoginCustomerId(Long.valueOf("INSERT_LOGIN_CUSTOMER_ID_HERE"))
        .build();

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

.NET

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

GoogleAdsConfig config = new GoogleAdsConfig()
{
    OAuth2Mode = OAuth2Flow.APPLICATION,
    OAuth2ClientId = "INSERT_OAUTH2_CLIENT_ID_HERE",
    OAuth2ClientSecret = "INSERT_OAUTH2_CLIENT_SECRET_HERE",
    OAuth2RefreshToken = "INSERT_OAUTH2_REFRESH_TOKEN_HERE",
    LoginCustomerId = "INSERT_LOGIN_CUSTOMER_ID_HERE",
};

GoogleAdsClient client = new GoogleAdsClient(config);

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

Python

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

from google.ads.googleads.client import GoogleAdsClient

credentials = {
    "login_customer_id": "INSERT_LOGIN_CUSTOMER_ID_HERE",
    "refresh_token": "INSERT_OAUTH2_REFRESH_TOKEN_HERE",
    "client_id": "INSERT_OAUTH2_CLIENT_ID_HERE",
    "client_secret": "INSERT_OAUTH2_CLIENT_SECRET_HERE",
    "use_proto_plus": True,
}

client = GoogleAdsClient.load_from_dict(credentials)

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

PHP

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

$oAuth2Credential = (new OAuth2TokenBuilder())
    ->withClientId('INSERT_OAUTH2_CLIENT_ID_HERE')
    ->withClientSecret('INSERT_OAUTH2_CLIENT_SECRET_HERE')
    ->withRefreshToken('INSERT_OAUTH2_REFRESH_TOKEN_HERE')
    ->build();

$googleAdsClient = (new GoogleAdsClientBuilder())
    ->withOAuth2Credential($oAuth2Credential)
    ->withLoginCustomerId('INSERT_LOGIN_CUSTOMER_ID_HERE')
    ->build();

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

Ruby

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

client = Google::Ads::GoogleAds::GoogleAdsClient.new do |config|
  config.client_id = 'INSERT_OAUTH2_CLIENT_ID_HERE'
  config.client_secret = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'
  config.refresh_token = 'INSERT_OAUTH2_REFRESH_TOKEN_HERE'
  config.login_customer_id = 'INSERT_LOGIN_CUSTOMER_ID_HERE'
end

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

Perl

您可以在运行时初始化 GoogleAdsClient 实例,使用从您要对其账号进行 API 调用的用户处获得的凭据。

my $api_client = Google::Ads::GoogleAds::Client->new({
  login_customer_id => "INSERT_LOGIN_CUSTOMER_ID_HERE"
});

my $oauth2_handler = $api_client->get_oauth2_applications_handler();
$oauth2_handler->set_client_id("INSERT_OAUTH2_CLIENT_ID_HERE");
$oauth2_handler->set_client_secret("INSERT_OAUTH2_CLIENT_SECRET_HERE");
$oauth2_handler->set_refresh_token("INSERT_OAUTH2_REFRESH_TOKEN_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://oauth2.googleapis.com/token

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

curl -i -X POST \
  https://googleads.googleapis.com/v25/customers/CUSTOMER_ID/googleAds:searchStream \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ACCESS_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"
}