חשבון שירות הוא סוג של חשבון Google שאפליקציה יכולה להשתמש בו כדי לגשת ל-Google APIs באופן פרוגרמטי באמצעות 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 יהיה מקושר לחשבון השירות שלכם.
האצלה
- צריכה להיות לכם גישת אדמין לדומיין שרשום ב-G Suite.
- צריך להיות לכם משתמש אחד או יותר ב-Display & Video 360 שמקושרים לחשבונות בדומיין שלכם שרשום ב-G Suite. אי אפשר להשתמש במשתמשים שמקושרים לחשבונות בדומיינים אחרים (לדוגמה, gmail.com).
הגדרה ושימוש בחשבון שירות
משתמש ב-DV360
יוצרים מפתח לחשבון שירות ב-Google API Console.
משייכים את המשתמש ב-Display & Video 360 לכתובת האימייל של חשבון השירות שהתקבלה בשלב הקודם, כמו שמתואר במאמר ניהול משתמשים ב-Display & Video 360 במרכז העזרה.
מטמיעים באפליקציה את תהליך ההרשאה באמצעות OAuth 2.0 משרת-אל-שרת, באמצעות חשבון השירות החדש שיצרתם. מידע נוסף זמין בקטע דוגמאות.
האצלה
יוצרים מפתח לחשבון שירות ב-Google API Console.
האצלת סמכות ברמת הדומיין לחשבון השירות הזה כדי לאפשר לו להתחזות למשתמשים בדומיין. כשמוצגת בקשה, מספקים את היקפי ה-API הבאים:
היקף משמעות https://www.googleapis.com/auth/display-videoגישת קריאה/כתיבה. https://www.googleapis.com/auth/display-video-user-managementגישת קריאה/כתיבה לשירות users. האפשרות הזו זמינה רק למשתמשים בחשבון שירות.מטמיעים באפליקציה את תהליך ההרשאה באמצעות 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.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 ImmutableSetOAUTH_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 = '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)
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; } }