از یک حساب سرویس استفاده کنید

یک حساب کاربری سرویس نوعی حساب کاربری گوگل است که می‌تواند توسط یک برنامه برای دسترسی به APIهای گوگل به صورت برنامه‌نویسی شده با استفاده از OAuth 2.0 استفاده شود. این نیازی به مجوز انسانی ندارد، بلکه از یک فایل کلیدی استفاده می‌کند که فقط برنامه شما می‌تواند به آن دسترسی داشته باشد.

قبل از مطالعه بیشتر در مورد حساب‌های سرویس، جریان برنامه نصب‌شده OAuth 2.0 ساده‌تر و بسیار توصیه‌شده را در نظر بگیرید. اگرچه این جریان برای تأیید برنامه شما نیاز به تعامل دستی کاربر دارد، اما این مرحله فقط باید یک بار انجام شود و نیازی به انجام آن در محیط تولید شما نیست. توکن‌های به‌روزرسانی تولید شده توسط این جریان هرگز منقضی نمی‌شوند، می‌توانند در حافظه پنهان ذخیره شده و در محیط‌های مختلف مستقر شوند و می‌توانند برای تولید توکن‌های دسترسی در صورت تقاضا و بدون تعامل کاربر استفاده شوند.

هنوز در حال خواندن هستید؟ بسیار خب، می‌توانید از یک حساب کاربری سرویس به یکی از روش‌های زیر استفاده کنید:

  • یک کاربر Display & Video 360 مرتبط با حساب سرویس خود ایجاد کنید. در این سناریو، حساب سرویس شما مانند یک حساب کاربری معمولی عمل می‌کند و به شما امکان دسترسی به همه شرکا و تبلیغ‌کنندگانی را می‌دهد که کاربر به آنها اختصاص داده شده است. این روش ترجیحی برای استفاده از حساب‌های سرویس با Display & Video 360 است.
  • از واگذاری اختیارات در سطح دامنه برای ارسال درخواست از طرف یک یا چند کاربر Display & Video 360 که به حساب‌های تحت یک دامنه G Suite متصل هستند، استفاده کنید. در این صورت، باید به دامنه هدف دسترسی مدیر داشته باشید. برای کمک در مورد G Suite و پیکربندی دامنه، به صفحه پشتیبانی G Suite مراجعه کنید.

پیش‌نیازها

برای استفاده از یک حساب کاربری مرتبط با کاربر Display & Video 360، برگه کاربر DV360 را انتخاب کنید. برای استفاده از واگذاری اختیارات در سطح دامنه، برگه واگذاری اختیارات را انتخاب کنید.

کاربر DV360

شما باید یک کاربر Display & Video 360 داشته باشید که به حساب سرویس شما متصل باشد.

نمایندگی

  1. شما باید به دامنه‌ای که در G Suite ثبت شده است، دسترسی مدیریتی داشته باشید.
  2. شما باید یک یا چند کاربر Display & Video 360 داشته باشید که به حساب‌های تحت دامنه ثبت‌شده در G Suite شما لینک شده باشند. کاربرانی که به حساب‌های تحت دامنه‌های دیگر (مثلاً gmail.com) لینک شده‌اند، قابل استفاده نیستند.

پیکربندی و استفاده از یک حساب کاربری سرویس

کاربر DV360

  1. یک کلید حساب سرویس در کنسول API گوگل ایجاد کنید.

  2. کاربر Display & Video 360 را با ایمیل حساب سرویسی که در مرحله قبل به دست آورده‌اید، همانطور که در مقاله مرکز راهنمای مدیریت کاربران در Display & Video 360 توضیح داده شده است، مرتبط کنید.

  3. با استفاده از حساب کاربری سرویس تازه ایجاد شده، جریان OAuth 2.0 سرور به سرور را در برنامه خود پیاده‌سازی کنید. برای اطلاعات بیشتر، به بخش مثال‌ها مراجعه کنید.

نمایندگی

  1. یک کلید حساب سرویس در کنسول API گوگل ایجاد کنید.

  2. اختیارات کل دامنه را به این حساب سرویس واگذار کنید تا بتواند هویت کاربران درون دامنه شما را جعل کند. در صورت درخواست، محدوده‌های API زیر را ارائه دهید:

    محدوده معنی
    https://www.googleapis.com/auth/display-video دسترسی خواندن/نوشتن.
    https://www.googleapis.com/auth/display-video-user-management دسترسی خواندن/نوشتن برای سرویس users . فقط برای کاربران حساب سرویس در دسترس است.

  3. جریان OAuth 2.0 سرور به سرور را در برنامه خود، با استفاده از حساب سرویس تازه ایجاد شده خود، پیاده‌سازی کنید. برای اطلاعات بیشتر، به بخش مثال‌ها مراجعه کنید. به یاد داشته باشید که برای جعل هویت باید یک حساب کاربری ارائه دهید و این حساب کاربری باید متعلق به دامنه‌ای باشد که در مرحله قبل، اختیارات دامنه-محور به حساب سرویس شما واگذار شده است.

برای راهنمایی در مورد پیکربندی G Suite و/یا دامنه، به صفحه پشتیبانی G Suite مراجعه کنید.

مثال‌ها

جاوا

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.displayvideo.v4.DisplayVideo;
import com.google.api.services.displayvideo.v4.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.
  }
}

پایتون

"""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 = 'v4'
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)

پی اچ پی

/**
 * 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;
    }
}