Menggunakan Akun Layanan

Akun layanan adalah jenis Akun Google yang dapat digunakan oleh aplikasi untuk mengakses Google API secara terprogram melalui OAuth 2.0. Tidak memerlukan otorisasi manusia tetapi justru menggunakan file kunci yang hanya dapat digunakan oleh aplikasi Anda akses.

Sebelum membaca selengkapnya tentang akun layanan, pertimbangkan metode yang lebih sederhana dan lainnya alur aplikasi terinstal OAuth 2.0 yang sangat direkomendasikan. Meskipun alur ini memerlukan interaksi pengguna manual untuk mengizinkan aplikasi Anda, hanya boleh dilakukan sekali dan tidak perlu dilakukan di lingkungan produksi. Token refresh yang dihasilkan oleh alur ini tidak memiliki tanggal habis masa berlaku, dapat di-cache, di-deploy ke lingkungan yang berbeda, dan dapat digunakan untuk membuat token akses permintaan tanpa adanya interaksi pengguna.

Masih membaca? Oke, Anda dapat menggunakan akun layanan di salah satu opsi berikut cara:

  • Buat Display & Pengguna Video 360 yang terkait dengan akun layanan. Dalam skenario ini, akun layanan Anda akan berperilaku seperti akun pengguna dan memungkinkan Anda untuk mengakses semua mitra dan pengiklan untuk yang disediakan untuk pengguna. Ini adalah cara yang direkomendasikan untuk menggunakan layanan akun dengan Display & Video 360
  • Gunakan delegasi tingkat domain untuk membuat permintaan atas nama salah satu atau lainnya Display & Pengguna Video 360 yang ditautkan ke akun di G Suite {i>Directory<i} Dalam hal ini, Anda harus memiliki akses administrator ke domain target. Untuk mendapatkan bantuan terkait G Suite dan/atau konfigurasi domain, lihat Halaman dukungan G Suite.

Prasyarat

Untuk menggunakan akun layanan yang terkait dengan kampanye Display & Pengguna Video 360, pilih Pengguna DV360 di bawah. Untuk menggunakan delegasi di seluruh domain, pilih tab Delegasi.

Pengguna DV360

Anda harus memiliki perangkat Display & Pengguna Video 360 yang ditautkan ke akun layanan Anda.

Delegasi

  1. Anda harus memiliki akses administrator ke domain yang terdaftar dengan Google Workspace.
  2. Anda harus memiliki satu atau beberapa kampanye Display & Pengguna Video 360 yang ditautkan ke akun dalam domain yang terdaftar untuk G Suite. Pengguna yang ditautkan ke akun pada domain lain (misalnya, gmail.com) tidak dapat digunakan.

Mengonfigurasi dan menggunakan akun layanan

Pengguna DV360

  1. Buat kunci akun layanan di Konsol API Google.

  2. Mengaitkan Display & Pengguna Video 360 dengan email akun layanan diperoleh di langkah sebelumnya, sebagaimana dijelaskan dalam Mengelola pengguna di Display & Pusat bantuan Video 360 artikel.

  3. Implementasikan alur OAuth 2.0 server-ke-server dalam aplikasi Anda, menggunakan akun layanan yang baru dibuat. Untuk informasi selengkapnya, lihat contoh.

Delegasi

  1. Buat kunci akun layanan di Konsol API Google.

  2. Delegasikan otoritas seluruh domain ke akun layanan ini untuk mengizinkannya untuk meniru identitas pengguna dalam domain Anda. Saat diminta, berikan cakupan API berikut:

    Cakupan Arti
    https://www.googleapis.com/auth/display-video Akses baca/tulis.
    https://www.googleapis.com/auth/display-video-user-management Akses baca/tulis untuk layanan users. Hanya tersedia untuk pengguna akun layanan.

  3. Implementasikan alur OAuth 2.0 server-ke-server dalam aplikasi Anda, menggunakan akun layanan yang baru dibuat. Untuk informasi selengkapnya, lihat contoh. Ingatlah bahwa Anda harus menyediakan akun untuk ditiru, dan harus berasal dari domain tempat layanan Anda Anda telah didelegasikan ke otoritas seluruh domain di langkah sebelumnya.

Untuk mendapatkan bantuan terkait G Suite dan / atau konfigurasi domain, lihat Halaman dukungan G Suite.

Contoh

Java

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.displayvideo.v3.DisplayVideo;
import com.google.api.services.displayvideo.v3.DisplayVideoScopes;
import com.google.common.base.Strings;
import com.google.common.collect.ImmutableSet;
import java.io.FileInputStream;

/**
 * This example demonstrates how to authenticate using a service account.
 */
public class AuthenticateUsingServiceAccount {
  // Path to a JSON file containing service account credentials for this application. This file can
  // be downloaded from the Credentials tab on the Google API Console.
  private static final String PATH_TO_JSON_FILE = "ENTER_PATH_TO_CLIENT_SECRETS_HERE";

  /**
   * An optional Google account email to impersonate. Only applicable to service accounts which have
   * enabled domain-wide delegation and wish to make API requests on behalf of an account within
   * their domain. Setting this field will not allow you to impersonate a user from a domain you
   * don't own (e.g., gmail.com).
   */
  private static final String EMAIL_TO_IMPERSONATE = "";

  // The OAuth 2.0 scopes to request.
  private static final ImmutableSet OAUTH_SCOPES =
      ImmutableSet.copyOf(DisplayVideoScopes.all());

  private static Credential getServiceAccountCredential(
      String pathToJsonFile, String emailToImpersonate) throws Exception {
    // Generate a credential object from the specified JSON file.
    GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(pathToJsonFile));

    // Update the credential object with appropriate scopes and impersonation info (if applicable).
    if (Strings.isNullOrEmpty(emailToImpersonate)) {
      credential = credential.createScoped(OAUTH_SCOPES);
    } else {
      credential =
          new GoogleCredential.Builder()
              .setTransport(credential.getTransport())
              .setJsonFactory(credential.getJsonFactory())
              .setServiceAccountId(credential.getServiceAccountId())
              .setServiceAccountPrivateKey(credential.getServiceAccountPrivateKey())
              .setServiceAccountScopes(OAUTH_SCOPES)
              // Set the email of the user you are impersonating (this can be yourself).
              .setServiceAccountUser(emailToImpersonate)
              .build();
    }

    return credential;
  }

  public static void main(String[] args) throws Exception {
    // Build service account credential.
    Credential credential = getServiceAccountCredential(PATH_TO_JSON_FILE, EMAIL_TO_IMPERSONATE);

    // Create a DisplayVideo service instance.
    //
    // Note: application name below should be replaced with a value that identifies your
    // application. Suggested format is "MyCompany-ProductName/Version.MinorVersion".
    DisplayVideo service =
        new DisplayVideo.Builder(credential.getTransport(), credential.getJsonFactory(), credential)
            .setApplicationName("displayvideo-java-service-acct-sample")
            .build();

    // Make API requests.
  }
}

Python

"""This example demonstrates how to authenticate using a service account.

An optional Google account email to impersonate may be specified as follows:
    authenticate_using_service_account.py <path_to_json_file> -i <email>

This optional flag only applies to service accounts which have domain-wide
delegation enabled and wish to make API requests on behalf of an account
within that domain. Using this flag will not allow you to impersonate a
user from a domain you don't own (e.g., gmail.com).
"""

import argparse
import sys

from googleapiclient import discovery
import httplib2
from oauth2client import client
from oauth2client import tools
from oauth2client.service_account import ServiceAccountCredentials

# Declare command-line flags.
argparser = argparse.ArgumentParser(add_help=False)
argparser.add_argument(
    'path_to_service_account_json_file',
    help='Path to the service account JSON file to use for authenticating.')
argparser.add_argument(
    '-i',
    '--impersonation_email',
    help='Google account email to impersonate.')

API_NAME = 'displayvideo'
API_VERSION = 'v3'
API_SCOPES = ['https://www.googleapis.com/auth/display-video']


def main(argv):
  # Retrieve command line arguments.
  parser = argparse.ArgumentParser(
      description=__doc__,
      formatter_class=argparse.RawDescriptionHelpFormatter,
      parents=[tools.argparser, argparser])
  flags = parser.parse_args(argv[1:])

  # Authenticate using the supplied service account credentials
  http = authenticate_using_service_account(
      flags.path_to_service_account_json_file,
      flags.impersonation_email)

  # Build a service object for interacting with the API.
  service = discovery.build(API_NAME, API_VERSION, http=http)

  # Make API requests.

def authenticate_using_service_account(path_to_service_account_json_file,
                                       impersonation_email):
  """Authorizes an httplib2.Http instance using service account credentials."""
  # Load the service account credentials from the specified JSON keyfile.
  credentials = ServiceAccountCredentials.from_json_keyfile_name(
      path_to_service_account_json_file,
      scopes=API_SCOPES)

  # Configure impersonation (if applicable).
  if impersonation_email:
    credentials = credentials.create_delegated(impersonation_email)

  # Use the credentials to authorize an httplib2.Http instance.
  http = credentials.authorize(httplib2.Http())

  return http


if __name__ == '__main__':
  main(sys.argv)

PHP

/**
 * This example demonstrates how to authenticate using a service account.
 *
 * The optional flag email parameter only applies to service accounts which have
 * domain-wide delegation enabled and wish to make API requests on behalf of an
 * account within that domain. Using this flag will not allow you to impersonate
 * a user from a domain that you don't own (e.g., gmail.com).
 */
class AuthenticateUsingServiceAccount
{
    // The OAuth 2.0 scopes to request.
    private static $OAUTH_SCOPES = [Google_Service_DisplayVideo::DISPLAY_VIDEO];

    public function run($pathToJsonFile, $email = null)
    {
        // Create an authenticated client object.
        $client = $this->createAuthenticatedClient($pathToJsonFile, $email);

        // Create a Dfareporting service object.
        $service = new Google_Service_DisplayVideo($client);

        // Make API requests.
    }

    private function createAuthenticatedClient($pathToJsonFile, $email)
    {
        // Create a Google_Client instance.
        //
        // Note: application name should be replaced with a value that identifies
        // your application. Suggested format is "MyCompany-ProductName".
        $client = new Google_Client();
        $client->setApplicationName('PHP service account sample');
        $client->setScopes(self::$OAUTH_SCOPES);

        // Load the service account credentials.
        $client->setAuthConfig($pathToJsonFile);

        // Configure impersonation (if applicable).
        if (!is_null($email)) {
            $client->setSubject($email);
        }

        return $client;
    }
}