Sử dụng tài khoản dịch vụ

Tài khoản dịch vụ là một loại Tài khoản Google mà ứng dụng có thể sử dụng để truy cập API Google theo phương thức lập trình qua OAuth 2.0. Bạn không cần sự cho phép của con người mà sử dụng tệp khoá mà chỉ ứng dụng của bạn mới có thể truy cập.

Trước khi đọc thêm về tài khoản dịch vụ, hãy cân nhắc yếu tố đơn giản hơn và nhiều yếu tố khác bạn nên thực hiện quy trình cài đặt ứng dụng đã cài đặt OAuth 2.0. Trong khi quy trình này yêu cầu người dùng phải tương tác thủ công để cho phép ứng dụng của bạn. chỉ được thực hiện một lần và không được thực hiện trong môi trường sản xuất. Mã làm mới do quy trình này tạo sẽ không bao giờ hết hạn, có thể được lưu vào bộ nhớ đệm và được triển khai cho nhiều môi trường và có thể dùng để tạo mã truy cập trên mà không có sự tương tác của người dùng.

Bạn vẫn đang đọc? Được rồi, bạn có thể sử dụng tài khoản dịch vụ theo một trong hai cách sau cách:

  • Tạo một Display & Người dùng Video 360 được liên kết với tài khoản dịch vụ của bạn. Trong trường hợp này, tài khoản dịch vụ của bạn hoạt động giống như tài khoản người dùng và cho phép bạn truy cập vào tất cả đối tác và nhà quảng cáo để mà người dùng đã được cấp phép. Đây là cách ưu tiên để sử dụng dịch vụ tài khoản Mạng Hiển thị Video 360.
  • Sử dụng tính năng uỷ quyền trên toàn miền để đưa ra yêu cầu thay mặt cho một hoặc khác Hiển thị & Người dùng video 360 được liên kết với các tài khoản trong một G Suite miền. Trong trường hợp này, bạn phải có quyền quản trị đối với miền đích. Để được trợ giúp về G Suite và/hoặc cấu hình miền, hãy xem Trang hỗ trợ của G Suite.

Điều kiện tiên quyết

Để sử dụng tài khoản dịch vụ được liên kết với một Mạng Hiển thị và Người dùng Video 360, hãy chọn Thẻ Người dùng DV360 ở bên dưới. Cách uỷ quyền trên toàn miền: chọn thẻ Uỷ quyền.

Người dùng DV360

Bạn phải có Màn hình & Người dùng Video 360 đã được liên kết với tài khoản dịch vụ của bạn.

Uỷ thác

  1. Bạn phải có quyền quản trị đối với miền đã đăng ký với G Suite.
  2. Bạn phải có một hoặc nhiều chiến dịch Hiển thị và Những người dùng Video 360 được liên kết với các tài khoản trong miền mà bạn đã đăng ký G Suite. Người dùng được liên kết với các tài khoản trong các miền khác (ví dụ: gmail.com) đều không thể sử dụng.

Định cấu hình và sử dụng tài khoản dịch vụ

Người dùng DV360

  1. Tạo khoá tài khoản dịch vụ trong Bảng điều khiển API của Google.

  2. Liên kết Hiển thị & Người dùng Video 360 có email tài khoản dịch vụ thu được ở bước trước như được mô tả trong Quản lý người dùng trong Mạng Hiển thị và Trung tâm trợ giúp về video 360 bài viết.

  3. Triển khai quy trình OAuth 2.0 từ máy chủ đến máy chủ trong ứng dụng của bạn bằng cách sử dụng tài khoản dịch vụ mới tạo của bạn. Để biết thêm thông tin, hãy xem ví dụ.

Uỷ thác

  1. Tạo khoá tài khoản dịch vụ trong Bảng điều khiển API của Google.

  2. Uỷ quyền quyền truy cập trên toàn miền cho tài khoản dịch vụ này để cho phép ứng dụng mạo danh người dùng trong miền của bạn. Khi được nhắc, hãy cung cấp các phạm vi API sau:

    Phạm vi Ý nghĩa
    https://www.googleapis.com/auth/display-video Quyền đọc/ghi
    https://www.googleapis.com/auth/display-video-user-management Quyền đọc/ghi đối với dịch vụ users. Chỉ dành cho người dùng tài khoản dịch vụ.

  3. Triển khai quy trình OAuth 2.0 từ máy chủ đến máy chủ trong ứng dụng của bạn bằng cách sử dụng tài khoản dịch vụ mới tạo của bạn. Để biết thêm thông tin, hãy xem ví dụ. Hãy nhớ rằng bạn sẽ cần cung cấp tài khoản để mạo danh và miền đó phải thuộc về miền mà dịch vụ của bạn sử dụng tài khoản đã được ủy quyền trên toàn miền trong bước trước đó.

Để được trợ giúp về G Suite và / hoặc cấu hình miền, hãy xem Trang hỗ trợ của G Suite.

Ví dụ

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