Google Workspace alanı genelinde yetki verme

Cloud Search Query API, API çağrılarının alanınızdaki lisanslı bir kullanıcıya ait OAuth kimlik bilgileri kullanılarak yetkilendirilmesini gerektirir. Dizine ekleme ve yapılandırma API'lerine erişmek için kullanılan hizmet hesapları, Cloud Search veya Google Workspace lisanslarına sahip alan kullanıcıları olmadıklarından varsayılan olarak sorgu API çağrıları için kullanılamaz. Sorgu API çağrılarının kimliğini doğrularken bir hizmet hesabı kullanmak istiyorsanız bir alan yöneticisi, hesaba alan adı genelinde kullanıcı verilerine erişim izni verebilir. Buna alan genelinde yetki yetkisi denir. Yetki verilmiş yetkiye sahip bir hizmet hesabı, Cloud Search'e erişimi olan kullanıcılar da dahil olmak üzere herhangi bir kullanıcının kimliğine bürünebilir.

Hizmet hesabını ve kimlik bilgilerini oluşturma

Hizmet hesabı kimlik bilgileriniz yoksa Hizmet hesabı kimlik bilgileri oluşturma bölümüne bakın.

Hizmet hesabınıza alan genelinde yetki verin

Bir Google Workspace alanındaki kullanıcı verilerine erişmek için oluşturduğunuz hizmet hesabına ilgili alanın süper yöneticisi tarafından erişim izni verilmesi gerekir. Alan genelinde yetki hakkında daha fazla bilgi edinmek için Alan genelinde yetkiyle Google Workspace API erişimini kontrol etme başlıklı makaleyi inceleyin.

Bir hizmet hesabına alan genelinde yetki vermek için:

  1. Alanınızın Yönetici Konsolu'nda Ana menü > Güvenlik > Erişim ve veri denetimi > API denetimleri'ne gidin.
  2. Alan genelinde yetki bölmesinde Alan Genelinde Yetkiyi Yönet'i seçin.

  3. Yeni ekle'yi tıklayın.

  4. Client ID (İstemci Kimliği) alanına, yukarıdaki hizmet hesabı oluşturma adımlarından elde edilen istemci kimliğini girin.

  5. OAuth Kapsamları alanına uygulamanız için gerekli olan kapsamların virgülle ayrılmış listesini girin. Query API'yi kullanan arama uygulamaları için https://www.googleapis.com/auth/cloud_search.query kapsamını kullanın.

  6. Yetkilendir'i tıklayın.

Hizmet hesabınız artık Cloud Search Query API'ye alan genelinde erişebilir ve bu kapsamda alanınızdaki herhangi bir kullanıcının kimliğine bürünebilir. Alanınızın kullanıcıları adına yetkili bir Cloud Search API hizmet nesnesi oluşturmaya hazırsınız.

Cloud Search API hizmet nesnesini örneklendirme

Bu bölümde, bir Cloud Search API hizmet nesnesinin nasıl örneklendirileceği ve ardından OAuth 2.0'ı ve Google Workspace alanı genelinde yetkiyi gerçekleştirmek için hizmet hesabınızın kimlik bilgilerini kullanarak API isteklerinde bulunmak üzere nasıl yetkilendirileceği gösterilmektedir. Örnekler, hizmet hesabının bilgilerini JSON biçiminde özel anahtar dosyasından okur.

Java

import java.util.Collections;
import java.io.FileInputStream;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.services.cloudsearch.v1.CloudSearch;
import com.google.api.services.cloudsearch.v1.CloudSearchScopes;
...

/** Path to the Service Account's Private Key file */
private static final String SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json";

/**
 * Build and return a Cloud Search service object authorized with the service
 * account that acts on behalf of the given user.
 *
 * @param userEmail The email of the user to impersonate. Needs permissions to access Cloud Search.
 * @return CloudSearch service object that is ready to make requests.
 */
public static CloudSearch getCloudSearchAPIService(String userEmail)
    throws FileNotFoundException, IOException {

  FileInputStream credsFile = new FileInputStream(SERVICE_ACCOUNT_FILE_PATH);

  GoogleCredential init = GoogleCredential.fromStream(credsFile);

  HttpTransport httpTransport = init.getTransport();
  JsonFactory jsonFactory = init.getJsonFactory();

  GoogleCredential creds = new GoogleCredential.Builder()
      .setTransport(httpTransport)
      .setJsonFactory(jsonFactory)
      .setServiceAccountId(init.getServiceAccountId())
      .setServiceAccountPrivateKey(init.getServiceAccountPrivateKey())
      .setServiceAccountScopes(Collections.singleton(CloudSearchScopes.CLOUD_SEARCH_QUERY))
      .setServiceAccountUser(userEmail)
      .build();

  CloudSearch service = new CloudSearch.Builder(httpTransport, jsonFactory, creds).build();

  return service;
}

Python

from google.oauth2 import service_account
from googleapiclient.discovery import build

# Path to the Service Account's Private Key file
SERVICE_ACCOUNT_FILE_PATH = "/path/to/key.json"

def create_query_api_service(user_email):
    """Build and return a CloudSearch service object authorized with the service
    account that acts on behalf of the given user.

    Args:
        user_email: The email of the user to impersonate. Needs permissions to access Cloud Search.
    Returns:
        Cloud Search Query API service object that is ready to make requests.
    """
    credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE_PATH,
        scopes=['https://www.googleapis.com/auth/cloud_search.query'])

    delegated_credentials = credentials.with_subject(user_email)

    return build("cloudsearch", "v1", credentials=delegated_credentials)