[サービス アカウント ワークフロー][service-account-workflow] と同様に、シングル ユーザー認証フローでは、Google 広告 UI の認証機能とユーザー管理機能を使用して、必要なすべてのアカウントへのアプリのアクセスを許可します。この認証ワークフローには次の 2 つのステップがあります。
- アプリで管理するすべての Google 広告アカウント へのアクセス権を 1 人のユーザーに付与します。
- ユーザーは、Google 広告アカウントをアプリに代行管理させることを承認します。これにより、アプリはすべての Google 広告アカウントにアクセスできるようになります。
関与するユーザーは 1 人だけなので、独自の OAuth 2.0 ユーザー認証フローを構築する代わりに、[gcloud CLI][gcloud-cli] や [GenerateUserCredential コードサンプル][generate-user-credentials-example] などのツールを使用できます。
このワークフローの関連するユースケースとしては、アカウントにアクセスできるユーザー ログインが少数(3 ~ 4 人)の場合があります。この場合、gcloud CLI などのコマンドライン ツールを使用して 3 ~ 4 人のユーザーの認証を取得する労力と比較すると、本格的な OAuth ユーザー認証ワークフローを構築する労力は正当化されません。
デメリット
サービス アカウント ワークフローと比較すると、このフローには次のようなデメリットがあります。
- ユーザー認証ワークフローでは、Google Cloud コンソールで OAuth 2.0 クライアント ID とシークレットを作成する必要があります。サービス アカウントとキーの作成よりも多くの構成手順が必要になります。
- アプリが追加の [Google Cloud アプリの確認プロセス][app-verification] を経る必要がある場合があります。
- 承認されたユーザーがチームまたは会社を離れた場合、アカウントからユーザーを削除するか、ユーザー アカウントを無効にすると、アプリが動作しなくなる可能性があります。サービス アカウントは個々のユーザーに関連付けられていないため、このリスクは回避されます。
- Google 広告アカウントを承認するユーザーは、セキュリティの脆弱性、マルウェア、フィッシングによる Google アカウントの不正使用を防ぐために、[2 要素認証を有効にする][2fa] などの追加の予防措置を講じる必要があります。サービス アカウントは、これらの攻撃モードの一部が直接適用されないため、この問題の影響を受けにくいと言えます。
認証情報を生成する
[手順][configure-oauth-consent] に沿って、アプリケーションの OAuth 同意画面を構成し、
https://www.googleapis.com/auth/adwordsを OAuth 2.0 スコープとして追加します。詳細については、 OAuth 同意画面の設定 をご覧ください。[手順][create-credentials] に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、まず [OAuth クライアントをダウンロード] アイコンをクリックし、次の画面で [JSON をダウンロード] ボタンをクリックして、クライアントの JSON ファイルをダウンロードします。ファイルに
credentials.jsonという名前を付けて保存します。アプリを使用して管理するすべての Google 広告アカウントにアクセスできるユーザー アカウントを特定します。アクセス権がないアカウントがある場合は、[手順][grant-access] に沿って必要なアクセス権を付与します。
gcloud CLI を [ダウンロードしてインストール][install-gcloud] します。インストールしたら、コマンドライン プロンプトから
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.30gcloud 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
その他のオプションについては、[構成ガイド][java-config-guide] をご覧ください。
.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);
その他のオプションについては、[構成ガイド][dotnet-config-guide] をご覧ください。
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
その他のオプションについては、[構成ガイド][python-config-guide] をご覧ください。
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"
その他のオプションについては、[構成ガイド][php-config-guide] をご覧ください。
Ruby
[google_ads_config.rb][ruby-config-file] ファイルで次のキーを構成します。
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
その他のオプションについては、[構成ガイド][ruby-config-guide] をご覧ください。
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
その他のオプションについては、[構成ガイド][perl-config-guide] をご覧ください。
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/tokenAPI 呼び出しでアクセス トークンを使用できるようになりました。次の例
は、
GoogleAdsService.SearchStream メソッドを使用してキャンペーン レポートを実行し、アカウント内の
キャンペーンを取得する方法を示しています。このガイドでは、
レポートの詳細については説明しません。
curl -i -X POST https://googleads.googleapis.com/v24/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"
}
[service-account-workflow]: /google-ads/api/docs/oauth/service-accounts [gcloud-cli]: https://cloud.google.com/sdk/gcloud [generate-user-credentials-example]: /google-ads/api/samples/generate-user-credentials [app-verification]: //support.google.com/cloud/answer/13461325 [2fa]: //support.google.com/google-ads/answer/12864186 [configure-oauth-consent]: /workspace/guides/configure-oauth-consent [create-credentials]: /workspace/guides/create-credentials#desktop-app [grant-access]: //support.google.com/google-ads/answer/6372672 [install-gcloud]: //cloud.google.com/sdk/docs/install [java-config-guide]: /google-ads/api/docs/client-libs/java/config-file [dotnet-config-guide]: /google-ads/api/docs/client-libs/dotnet/configuration [python-config-guide]: /google-ads/api/docs/client-libs/python/configuration [php-config-guide]: /google-ads/api/docs/client-libs/php/configuration [ruby-config-file]: //github.com/googleads/google-ads-ruby/blob/HEAD/google_ads_config.rb [ruby-config-guide]: /google-ads/api/docs/client-libs/ruby/configuration [perl-config-guide]: /google-ads/api/docs/client-libs/perl/configuration [oauth-playground]: /oauthplayground/ [playground-video]: //www.youtube.com/watch?v=KFICa7Ngzng