Konto usługi to rodzaj konta Google, którego aplikacja może używać do uzyskiwania dostępu do interfejsów Google API za pomocą protokołu OAuth 2.0. Nie wymaga to autoryzacji przez człowieka, ale zamiast tego używa pliku klucza, do którego dostęp ma tylko Twoja aplikacja.
Zanim przeczytasz więcej o kontach usługi, rozważ prostszy i bardzo zalecany proces instalowania aplikacji OAuth 2.0. Chociaż ta procedura wymaga ręcznej interakcji użytkownika w celu autoryzacji aplikacji, ten krok musi zostać wykonany tylko raz i nie musi być wykonywany w środowisku produkcyjnym. Tokeny odświeżania wygenerowane przez ten proces nigdy nie wygasają. Można je przechowywać w pamięci podręcznej i wdrażać w różnych środowiskach. Mogą też służyć do generowania tokenów dostępu na żądanie bez udziału użytkownika.
Czy nadal czytasz? Możesz używać konta usługi na jeden z tych sposobów:
- Utwórz użytkownika Display & Video 360 powiązanego z kontem usługi. W tym scenariuszu konto usługi działa jak zwykłe konto użytkownika i umożliwia dostęp do wszystkich partnerów i reklamodawców, dla których zostało utworzone konto użytkownika. Jest to preferowany sposób korzystania z kont usług w Display & Video 360.
- Użyj przekazywania dostępu w całej domenie, aby przesyłać prośby w imieniu co najmniej 1 użytkownika Display & Video 360 połączonego z kontami w domenie G Suite. W takim przypadku musisz mieć dostęp administracyjny do docelowej domeny. Aby uzyskać pomoc dotyczącą konfiguracji G Suite lub domeny, odwiedź stronę pomocy G Suite.
Wymagania wstępne
Aby używać konta usługi powiązanego z użytkownikiem Display & Video 360, kliknij kartę Użytkownik DV360. Aby użyć przekazywania dostępu w całej domenie, wybierz kartę Przekazywanie.
Użytkownik DV360
Musisz mieć użytkownika Display & Video 360 połączonego z kontem usługi.
Przekazywanie
- Musisz mieć dostęp administracyjny do domeny zarejestrowanej w G Suite.
- Musisz mieć co najmniej 1 użytkownika Display & Video 360 połączonego z kontami w domenie zarejestrowanej w G Suite. Użytkownicy powiązani z kontami w innych domenach (np. gmail.com) nie mogą być używani.
Konfigurowanie i używanie konta usługi
Użytkownik DV360
Wygeneruj klucz konta usługi w Konsoli interfejsów API Google.
Połącz użytkownika Display & Video 360 z adresem e-mail konta usługi uzyskanym w poprzednim kroku zgodnie z opisem w artykule Zarządzanie użytkownikami w Display & Video 360 w Centrum pomocy.
Wdrożyć w aplikacji proces OAuth 2.0 na potrzeby połączeń między serwerami, korzystając z nowo utworzonego konta usługi. Więcej informacji znajdziesz w sekcji przykładów.
Przekazywanie
Wygeneruj klucz konta usługi w Konsoli interfejsów API Google.
Przekaż temu kontu usługi uprawnienia obejmujące całą domenę, aby umożliwić mu podszywanie się pod użytkowników w Twojej domenie. Gdy pojawi się taka prośba, podaj te zakresy uprawnień interfejsu API:
Zakres Znaczenie https://www.googleapis.com/auth/display-video
Uprawnienia do odczytu/zapisu. https://www.googleapis.com/auth/display-video-user-management
Uprawnienia do odczytu/zapisu w usłudze users
. Dostępne tylko dla użytkowników kont usługi.Wdrożyć w aplikacji proces OAuth 2.0 na potrzeby połączeń między serwerami, korzystając z nowo utworzonego konta usługi. Więcej informacji znajdziesz w sekcji przykładów. Pamiętaj, że musisz podać konto, które chcesz podszywać, i musi ono należeć do domeny, w której w poprzednim kroku Twoje konto usługi otrzymało uprawnienia w obrębie całej domeny.
Aby uzyskać pomoc dotyczącą konfiguracji G Suite lub domeny, odwiedź stronę pomocy G Suite.
Przykłady
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; } }