サービス アカウントのワークフローと同様に、シングル ユーザー認証フローでは、Google 広告の UI で提供される承認機能とユーザー管理機能を利用して、アプリに必要なすべてのアカウントへのアクセス権を付与します。この認証ワークフローには次の 2 つのステップがあります。
- アプリで管理する必要があるすべての Google 広告アカウントへのアクセス権を 1 人のユーザーに付与します。
- ユーザーがアプリに代行して Google 広告アカウントを管理する権限を付与すると、アプリはすべての Google 広告アカウントにアクセスできるようになります。
ユーザーが 1 人しか関与しないため、独自の OAuth 2.0 ユーザー認証フローを構築する代わりに、gcloud CLI や GenerateUserCredential コード例などのツールを使用できます。
このワークフローの関連するユースケースは、アカウントに少数のユーザー ログイン(3 ~ 4 人のユーザーなど)でアクセスできる場合です。この場合、gcloud CLI などのコマンドライン ツールを使用して 3 ~ 4 人のユーザーの承認を取得する労力と比較すると、本格的な OAuth マルチユーザー認証ワークフローを構築する開発労力は正当化されません。
デメリット
サービス アカウントのワークフローと比較すると、このフローにはいくつかの欠点があります。
- ユーザー認証ワークフローでは、Google Cloud コンソールで OAuth 2.0 クライアント ID とシークレットを作成する必要があります。これには、サービス アカウントとキーの作成よりも多くの構成手順が必要です。
- 承認済みユーザーがチームまたは会社を離れた場合、アカウントからユーザーを削除するか、ユーザー アカウントを無効にすると、アプリが動作しなくなることがあります。サービス アカウントは個々のユーザーに関連付けられていないため、このリスクは回避されます。
- Google 広告アカウントを承認するユーザーは、セキュリティの脆弱性、マルウェア、フィッシングによって Google アカウントが不正使用されるのを防ぐため、Google アカウントでパスキーを有効にする必要があります。パスキーを有効にするためにサービス アカウントは必要ありません。また、これらの攻撃モードの一部はサービス アカウントに直接適用されないため、サービス アカウントはこの問題の影響を受けにくいです。
認証情報を生成する
アプリケーションの OAuth 同意画面を構成し、OAuth 2.0 スコープとして
https://www.googleapis.com/auth/adwordsを追加します。詳細については、OAuth 同意画面の設定をご覧ください。手順に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、確認ダイアログの [JSON をダウンロード] ボタンをクリックして、クライアントの JSON ファイルをダウンロードします。ファイルを
credentials.jsonとして保存します。アプリを使用して管理するすべての Google 広告アカウントにアクセスできるユーザー アカウントを特定します。アクセス権がないアカウントがある場合は、そのユーザーにアカウントのアクセス権を付与します。
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前の手順の
credentials.jsonファイルを使用して gcloud CLI ツールを実行し、OAuth 2.0 更新トークンを生成します。更新トークンが gcloud CLI のデフォルト プロジェクトではなく、Google API Console プロジェクトで発行されるようにするには、--client-id-fileを渡す必要があります。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 認証の手順が実行されます。前の手順で選択したユーザーとしてログインしていることを確認します。アプリが未確認の場合、警告画面が表示されることがあります。このような場合は、[詳細] リンクをクリックし、[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" }
クライアント ライブラリの構成
クライアント ライブラリの構成方法については、プログラミング言語に対応するタブを選択してください。承認済みユーザーが Google 広告クライアント センター(MCC)アカウントを介してクライアント アカウントにアクセスする場合は、login-customer-id(または loginCustomerId)を、そのクライアント センター(MCC)アカウントの 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"
その他のオプションについては、構成ガイドをご覧ください。
Ruby
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/tokenAPI 呼び出しでアクセス トークンを使用できます。次の例は、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"
}