單一使用者驗證工作流程

與服務帳戶工作流程類似,單一使用者驗證流程會使用 Google Ads UI 提供的授權和使用者管理功能,授予應用程式存取所有必要帳戶的權限。這個驗證工作流程包含兩個步驟:

  • 您授予單一使用者存取權,可存取應由應用程式管理的所有 Google Ads 帳戶。
  • 使用者授權應用程式代為管理 Google Ads 帳戶,因此應用程式可存取所有 Google Ads 帳戶。

由於只涉及一位使用者,您可以依賴 gcloud CLI 或 GenerateUserCredential 程式碼範例等工具,而不必自行建構 OAuth 2.0 使用者驗證流程。

這個工作流程的相關用途是,當您的帳戶可以透過少數使用者登入 (例如 3 到 4 位使用者) 存取時,與使用 gcloud CLI 等指令列工具取得 3 到 4 位使用者的授權相比,建構完整的 OAuth 多使用者驗證工作流程所需的開發工作並不合理。

缺點

與服務帳戶工作流程相比,這個流程有以下缺點:

  1. 使用者驗證工作流程需要您在 Google Cloud 控制台中建立 OAuth 2.0 用戶端 ID 和密鑰,這需要比建立服務帳戶和金鑰更多的設定步驟。
  2. 如果授權使用者離開團隊或公司,當您從帳戶中移除該使用者或停用使用者帳戶時,應用程式可能會停止運作。服務帳戶不會與個別使用者繫結,因此可避免這項風險。
  3. 授權 Google Ads 帳戶的使用者應在 Google 帳戶中啟用密碼金鑰,以免 Google 帳戶因安全性不佳、惡意軟體或網路釣魚而遭入侵。服務帳戶不需要啟用密碼金鑰,而且由於部分攻擊模式不直接適用於服務帳戶,因此較不易受到這個問題的影響。

產生憑證

  1. 為應用程式設定 OAuth 同意畫面,並新增 https://www.googleapis.com/auth/adwords 做為 OAuth 2.0 範圍。詳情請參閱「設定 OAuth 同意畫面」。

  2. 按照操作說明建立用戶端 ID 和用戶端密鑰。建立 OAuth 2.0 用戶端後,請按一下確認對話方塊中的「Download JSON」(下載 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
    
  5. 使用上一個步驟中的 credentials.json 檔案執行 gcloud CLI 工具,產生 OAuth 2.0 更新權杖。您必須傳遞 --client-id-file,才能在 Google API 控制台專案下核發更新權杖,而非 gcloud CLI 的預設專案:

    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
  6. gcloud 指令會在新的瀏覽器視窗中開啟 Google 帳戶登入視窗,並引導您完成 OAuth 2.0 驗證步驟。請務必以先前步驟中選取的使用者身分登入。如果應用程式未經驗證,您可能會看到警告畫面。在這種情況下,您可以放心點選「 Advanced」(進階) 連結,然後點選「Go to PROJECT_NAME (unsafe)」(前往 PROJECT_NAME (不安全)) 選項。

  7. 確認範圍後,按一下「Continue」(繼續) 按鈕授予權限。瀏覽器會前往 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"
    }
    

用戶端程式庫設定

選取程式設計語言對應的分頁,查看如何設定用戶端程式庫的操作說明。如果授權使用者透過 Google Ads 管理員帳戶存取客戶帳戶,請將 login-customer-id (或 loginCustomerId) 設為該管理員帳戶的 10 位數客戶 ID (不含連字號)。

Java

在 ads.properties 檔案中設定下列鍵。

api.googleads.clientId=INSERT_OAUTH2_CLIENT_ID_HERE
api.googleads.clientSecret=INSERT_OAUTH2_CLIENT_SECRET_HERE
api.googleads.refreshToken=INSERT_OAUTH2_REFRESH_TOKEN_HERE
api.googleads.loginCustomerId=INSERT_LOGIN_CUSTOMER_ID_HERE

如需其他選項,請參閱設定指南。

.NET

在 GoogleAdsConfig 執行個體上設定 OAuth 2.0 憑證,並用來初始化 GoogleAdsClient 物件。

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

在 google-ads.yaml 檔案中設定下列索引鍵。

client_id: INSERT_OAUTH2_CLIENT_ID_HERE
client_secret: INSERT_OAUTH2_CLIENT_SECRET_HERE
refresh_token: INSERT_OAUTH2_REFRESH_TOKEN_HERE
login_customer_id: INSERT_LOGIN_CUSTOMER_ID_HERE
use_proto_plus: True

如需其他選項,請參閱設定指南。

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"

如需其他選項,請參閱設定指南。

小茹

在 google_ads_config.rb 檔案中設定下列鍵。

Google::Ads::GoogleAds::Config.new do |c|
  c.client_id = 'INSERT_OAUTH2_CLIENT_ID_HERE'
  c.client_secret = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'
  c.refresh_token = 'INSERT_OAUTH2_REFRESH_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://oauth2.googleapis.com/token

您可以在 API 呼叫中使用存取權杖。以下範例說明如何使用 GoogleAdsService.SearchStream 方法執行廣告活動報表,擷取帳戶中的廣告活動。本指南不會詳細說明報表。

curl -i -X POST \
  https://googleads.googleapis.com/v26/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"
}