サービス アカウントのワークフローと同様に、単一ユーザー認証フローでは、Google 広告の UI で提供される承認機能とユーザー管理機能を使用して、アプリに必要なすべてのアカウントへのアクセス権を付与します。この認証ワークフローには次の 2 つのステップがあります。
- アプリで管理する必要があるすべての Google 広告アカウントへのアクセス権を 1 人のユーザーに付与します。
- ユーザーがアプリに Google 広告アカウントの管理を委任すると、アプリはすべての Google 広告アカウントにアクセスできるようになります。
ユーザーは 1 人だけなので、独自の OAuth 2.0 ユーザー認証フローを構築する代わりに、gcloud CLI や GenerateUserCredential コード例などのツールを使用できます。
このワークフローの関連ユースケースとして、アカウントに少数のユーザー ログイン(3 ~ 4 人のユーザーなど)でアクセスできるため、完全な OAuth ユーザー認証ワークフローを構築する開発作業が、gcloud CLI などのコマンドライン ツールを使用して 3 ~ 4 人のユーザーの認可を取得する作業と比較して正当化されない場合があります。
デメリット
サービス アカウントのワークフローと比較すると、このフローには次のような欠点があります。
- ユーザー認証ワークフローでは、Google Cloud コンソールで OAuth 2.0 クライアント ID とシークレットを作成する必要があります。これには、サービス アカウントとキーの作成よりも多くの構成手順が必要です。
- アプリは、追加の Google Cloud アプリの確認プロセスを経る必要がある場合があります。
- 承認済みユーザーがチームまたは会社を離れた場合、アカウントからユーザーを削除するか、ユーザー アカウントを無効にすると、アプリが動作しなくなることがあります。サービス アカウントは個々のユーザーに関連付けられていないため、このリスクは回避されます。
- Google 広告アカウントを承認するユーザーは、セキュリティの脆弱性、マルウェア、フィッシングが原因で Google アカウントが不正使用されるのを防ぐため、2 段階認証プロセスを有効にするなど、追加の予防措置を講じる必要があります。サービス アカウントは、これらの攻撃モードの一部が直接適用されないため、この問題の影響を受けにくいです。
認証情報を生成する
手順に沿って、アプリケーションの OAuth 同意画面を構成し、
https://www.googleapis.com/auth/adwords
を OAuth 2.0 スコープとして追加します。手順に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、まず [OAuth クライアントをダウンロード] アイコンをクリックし、次の画面で [JSON をダウンロード] ボタンをクリックして、クライアントの JSON ファイルをダウンロードします。ファイルを
credentials.json
として保存します。アプリを使用して管理するすべての Google 広告アカウントにアクセスできるユーザー アカウントを特定します。アクセス権がないアカウントがある場合は、手順に沿って必要なアクセス権を付与します。
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
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
ファイルは前のステップのものです。gcloud
コマンドを実行すると、新しいブラウザ ウィンドウで Google アカウントのログイン ウィンドウが開き、OAuth 2.0 認証の手順が表示されます。前の手順で選択したユーザーとしてログインしていることを確認します。アプリが未確認の場合は、警告画面が表示されることがあります。このような場合は、[詳細を表示] リンクをクリックし、[PROJECT_NAME(未確認)に移動] オプションをクリックしても安全です。スコープを確認したら、[続行] ボタンをクリックして権限を付与します。ブラウザが
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
API 呼び出しを行うアカウントのユーザーから取得した認証情報を使用して、実行時に GoogleAdsClient
インスタンスを初期化できます。
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/v21/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"
}