與服務帳戶工作流程類似,單一使用者驗證流程會使用 Google Ads UI 提供的授權和使用者管理功能,授予應用程式存取所有必要帳戶的權限。這個驗證工作流程包含兩個步驟:
- 您授予單一使用者存取權,可存取應由應用程式管理的所有 Google Ads 帳戶。
- 使用者授權應用程式代為管理 Google Ads 帳戶,因此應用程式可存取所有 Google Ads 帳戶。
由於只涉及一位使用者,您可以依賴 gcloud CLI 或 GenerateUserCredential 程式碼範例等工具,而不必自行建構 OAuth 2.0 使用者驗證流程。
這個工作流程的相關用途是,當您的帳戶可透過少數使用者登入 (例如 3 到 4 位使用者) 存取時,與使用 gcloud CLI 等指令列工具取得 3 到 4 位使用者的授權相比,開發完整的 OAuth 多使用者驗證工作流程並不合理。
缺點
與服務帳戶工作流程相比,這個流程有幾個缺點:
- 使用者驗證工作流程需要您在 Google API 控制台中建立 OAuth 2.0 用戶端 ID 和密鑰,這比建立服務帳戶和金鑰需要更多設定步驟。
- 如果授權使用者離開團隊或公司,當您從帳戶中移除該使用者或停用使用者帳戶時,應用程式可能會停止運作。服務帳戶不會與個別使用者繫結,因此可避免這項風險。
- 為防範惡意軟體或網路釣魚導致帳戶遭入侵,授權 Google Ads 帳戶的使用者在產生 OAuth 2.0 更新權杖時,必須使用密碼金鑰驗證。服務帳戶不需要密碼金鑰,也較不易受到網路釣魚等針對使用者的針對性攻擊。
產生憑證
為應用程式設定 OAuth 同意畫面,並新增
https://www.googleapis.com/auth/adwords做為 OAuth 2.0 範圍。詳情請參閱「設定 OAuth 同意畫面」。按照操作說明建立用戶端 ID 和用戶端密鑰。建立 OAuth 2.0 用戶端後,請按一下確認對話方塊中的「Download JSON」(下載 JSON) 按鈕,下載用戶端的 JSON 檔案。將檔案儲存為
credentials.json。找出有權存取您要透過應用程式管理的所有 Google Ads 帳戶的使用者帳戶。如果有些帳戶缺少存取權,請授予帳戶存取權給該使用者。確認這個使用者帳戶已設定密碼金鑰 (新建立的密碼金鑰可能會有 7 天的安全性延遲,之後才會成為受信任狀態)。
下載並安裝 gcloud CLI。安裝完成後,請在指令列提示中執行
gcloud version指令,確認工具運作正常。輸出看起來類似以下內容:gcloud versionGoogle 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執行 gcloud CLI 工具,並使用上一步的
credentials.json檔案,產生 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_JSONgcloud指令會在新的瀏覽器視窗中開啟 Google 帳戶登入視窗,並引導您完成 OAuth 2.0 驗證步驟。以您在先前步驟中選取的使用者身分登入,並使用密碼金鑰驗證身分。如果應用程式未經驗證,您可能會看到警告畫面。在這種 情況下,您可以放心點選「Advanced」(進階) 連結,然後點選「Go to PROJECT_NAME (unsafe)」(前往 (不安全)) 選項。確認範圍後,按一下「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"
}