単一ユーザー認証のワークフロー

[サービス アカウント ワークフロー][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 ユーザー認証ワークフローを構築する労力は正当化されません。

デメリット

サービス アカウント ワークフローと比較すると、このフローには次のようなデメリットがあります。

  1. ユーザー認証ワークフローでは、Google Cloud コンソールで OAuth 2.0 クライアント ID とシークレットを作成する必要があります。サービス アカウントとキーの作成よりも多くの構成手順が必要になります。
  2. アプリが追加の [Google Cloud アプリの確認プロセス][app-verification] を経る必要がある場合があります。
  3. 承認されたユーザーがチームまたは会社を離れた場合、アカウントからユーザーを削除するか、ユーザー アカウントを無効にすると、アプリが動作しなくなる可能性があります。サービス アカウントは個々のユーザーに関連付けられていないため、このリスクは回避されます。
  4. Google 広告アカウントを承認するユーザーは、セキュリティの脆弱性、マルウェア、フィッシングによる Google アカウントの不正使用を防ぐために、[2 要素認証を有効にする][2fa] などの追加の予防措置を講じる必要があります。サービス アカウントは、これらの攻撃モードの一部が直接適用されないため、この問題の影響を受けにくいと言えます。

認証情報を生成する

  1. [手順][configure-oauth-consent] に沿って、アプリケーションの OAuth 同意画面を構成し、https://www.googleapis.com/auth/adwords を OAuth 2.0 スコープとして追加します。詳細については、 OAuth 同意画面の設定 をご覧ください。

  2. [手順][create-credentials] に沿って、クライアント ID とクライアント シークレットを作成します。OAuth 2.0 クライアントを作成したら、まず [OAuth クライアントをダウンロード] アイコンをクリックし、次の画面で [JSON をダウンロード] ボタンをクリックして、クライアントの JSON ファイルをダウンロードします。ファイルに credentials.json という名前を付けて保存します。

  3. アプリを使用して管理するすべての Google 広告アカウントにアクセスできるユーザー アカウントを特定します。アクセス権がないアカウントがある場合は、[手順][grant-access] に沿って必要なアクセス権を付与します。

  4. 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.30
  5. 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 ファイルは前の手順で作成したものです。

  6. gcloud コマンドを実行すると、新しいブラウザ ウィンドウで Google アカウントのログイン ウィンドウが開き、OAuth 2.0 認証の手順が表示されます。前の手順で選択したユーザーとしてログインしてください。アプリが 未確認の場合、 警告画面が表示されることがあります。その場合は、[詳細を表示] リンクをクリックし、[PROJECT_NAME(未確認)に移動] オプションをクリックしても問題ありません。

  7. スコープを確認したら、[続行] ボタンをクリックして権限を付与します。ブラウザが 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/token

API 呼び出しでアクセス トークンを使用できるようになりました。次の例 は、 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