שימוש בחשבון שירות

חשבון שירות הוא סוג של חשבון Google שאפליקציה יכולה להשתמש בו כדי לגשת ל-Google APIs באופן פרוגרמטי דרך OAuth 2.0. הדרישה הזו לא מחייבת הרשאה אנושית, אבל במקום זאת היא משתמשת בקובץ מפתח שרק האפליקציה שלכם יכולה גישה.

לפני שקוראים מידע נוסף על חשבונות שירות, כדאי לנסות את האפשרויות הפשוטות יותר מומלץ מאוד תהליך אפליקציה מותקנת ב-OAuth 2.0. בזמן בתהליך הזה נדרשת פעולה ידנית של המשתמש כדי לאשר את האפליקציה. חייב להתבצע פעם אחת בלבד ואין צורך לבצע אותו בסביבת הייצור. לאסימוני הרענון שנוצרו על ידי התהליך הזה אין תאריך תפוגה, ניתן לשמור אותם במטמון נפרסות בסביבות שונות, ועשויים לשמש ליצירת אסימוני גישה לביקוש ללא אינטראקציה של המשתמש.

עדיין קורא? אוקיי, אפשר להשתמש בחשבון שירות באחת מהדרכים הבאות דרכים:

  • יצירת רשת המדיה משתמש ב-Video 360 שמשויך אל חשבון שירות. בתרחיש הזה, חשבון השירות שלכם יתנהג כמו חשבון רגיל חשבון משתמש ומאפשר לך לגשת לכל השותפים והמפרסמים כדי שהוקצה למשתמש. זו הדרך המועדפת להשתמש בשירות חשבונות עם רשת המדיה ו- וידאו 360
  • להשתמש בהענקת גישה ברמת הדומיין כדי לשלוח בקשות בשם יותר רשת המדיה משתמשי Video 360 שמקושרים לחשבונות במסגרת G Suite דומיין. במקרה כזה, צריכה להיות לכם הרשאת אדמין לדומיין היעד. לקבלת עזרה בהגדרת הדומיין של G Suite ו/או הדומיין, כדאי לעיין ב דף התמיכה של G Suite

דרישות מוקדמות

כדי להשתמש בחשבון שירות שמשויך לרשת המדיה משתמש ב-Video 360, בוחרים את בכרטיסייה משתמש ב-DV360 שבהמשך. כדי להשתמש בהענקת גישה ברמת הדומיין: בוחרים את הכרטיסייה Delegation.

משתמש ב-DV360

צריך להיות לך כרטיס 'Display &' משתמש ב-Video 360 שמקושר לחשבון השירות שלכם.

האצלה

  1. צריכה להיות לכם הרשאת אדמין לדומיין שרשום אצל G Suite.
  2. צריך להיות לך לפחות פריט אחד של רשת המדיה & משתמשי Video 360 שמקושרים לחשבונות בדומיין הרשום ב-G Suite. משתמשים שמקושרים לחשבונות של לא ניתן להשתמש בדומיינים אחרים (לדוגמה, gmail.com).

הגדרת חשבון שירות ושימוש בו

משתמש ב-DV360

  1. ליצור מפתח לחשבון שירות ב- מסוף Google API.

  2. שיוך בין התצוגה משתמש ב-Video 360 עם כתובת האימייל של חשבון השירות שקיבלתם בשלב הקודם, כמו שמתואר ניהול משתמשים ב-Display & מרכז העזרה של Video 360 מאמר.

  3. הטמעת זרימה מסוג OAuth 2.0 משרת-לשרת באפליקציה שלכם, באמצעות את חשבון השירות החדש שיצרתם. מידע נוסף זמין במאמר דוגמאות.

האצלה

  1. ליצור מפתח לחשבון שירות ב- מסוף Google 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.

דוגמאות

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