Краткое руководство по Go

Создайте приложение для командной строки на языке Go, которое отправляет запросы к Directory API.

В руководствах по быстрому началу работы объясняется, как настроить и запустить приложение, вызывающее Google Workspace API. В этом руководстве по быстрому началу работы используется упрощенный подход к аутентификации, подходящий для тестовой среды. Для рабочей среды рекомендуем ознакомиться с информацией об аутентификации и авторизации, прежде чем выбирать учетные данные для доступа, подходящие для вашего приложения.

В этом руководстве по быстрому началу работы используются рекомендованные клиентские библиотеки API Google Workspace, которые обрабатывают некоторые детали процесса аутентификации и авторизации.

Цели

  • Настройте среду.
  • Настройте образец.
  • Запустите пример.

Требования

Как настроить среду

Чтобы выполнить инструкции из этого руководства, настройте среду.

Включение API

Прежде чем использовать API Google, их нужно включить в облачном проекте Google Cloud. В одном облачном проекте Google Cloud можно включить один или несколько API.

Если вы используете новый проект Google Cloud, чтобы выполнить это краткое руководство, настройте окно запроса доступа OAuth. Если вы уже выполнили этот шаг для своего облачного проекта, перейдите к следующему разделу.

  1. В Google API Console нажмите на значок меню > Google Auth platform (Платформа Google Auth) > Branding (Брендинг).

    Перейти к брендингу

  2. Если вы уже настроили платформу аутентификации Google, вы можете задать следующие настройки окна запроса доступа OAuth в разделах Брендинг, Аудитория и Доступ к данным. Если вы видите сообщение Google Auth platform not configured yet (Платформа Google Auth ещё не настроена), нажмите Get Started (Начать):
    1. В разделе Информация о приложении в поле Название приложения введите название приложения.
    2. В поле Электронный адрес службы поддержки укажите адрес, по которому пользователи смогут обращаться с вопросами о согласии.
    3. Нажмите Далее.
    4. В разделе Аудитория выберите Внутренние.
    5. Нажмите Далее.
    6. В разделе Контактная информация укажите адрес электронной почты, на который вы хотите получать уведомления об изменениях в проекте.
    7. Нажмите Далее.
    8. В разделе Завершение ознакомьтесь с Правилами в отношении пользовательских данных сервисов API Google и, если вы согласны с ними, выберите Я принимаю Правила в отношении пользовательских данных сервисов API Google.
    9. Нажмите Продолжить.
    10. Нажмите Создать.
  3. Пока вы можете пропустить добавление областей действия. В будущем, когда вы будете создавать приложение для использования за пределами организации Google Workspace, вам нужно будет изменить Тип пользователя на Внешний. Затем добавьте области авторизации, необходимые для вашего приложения. Подробную информацию вы найдете в руководстве по настройке запроса согласия OAuth.

Как авторизовать учетные данные для компьютерного приложения

Чтобы выполнить аутентификацию конечных пользователей и получить доступ к пользовательским данным в приложении, вам нужно создать один или несколько идентификаторов клиента OAuth 2.0. Идентификатор клиента используется для идентификации одного приложения на серверах OAuth Google. Если ваше приложение работает на нескольких платформах, вам нужно создать отдельный идентификатор клиента для каждой из них.
  1. В консоли Google Cloud нажмите на значок меню > Google Auth platform (Платформа Google Auth) > Clients (Клиенты).

    Перейти в раздел "Клиенты"

  2. Нажмите Create Client (Создать клиента).
  3. Нажмите Тип приложения > Компьютерное приложение.
  4. В поле Название введите название учетных данных. Это название показывается только в консоли Google Cloud.
  5. Если ваше приложение – это ИИ-агент, который выполняет действия от имени пользователей, выберите Использовать этот клиент для агента на основе ИИ. Если ваше приложение поддерживает как рабочие процессы ИИ-агентов, так и стандартные пользовательские функции, создайте отдельные клиенты OAuth для каждого из них. После создания клиента изменить эту настройку нельзя.
  6. Нажмите Создать.

    Созданные учетные данные появятся в разделе "Идентификаторы клиентов OAuth 2.0".

  7. Сохраните скачанный JSON-файл под названием credentials.json и переместите его в рабочую папку.

Подготовьте рабочую область

  1. Создайте рабочий каталог:

    mkdir quickstart
    
  2. Перейдите в рабочий каталог:

    cd quickstart
    
  3. Инициализируйте новый модуль:

    go mod init quickstart
    
  4. Получите клиентскую библиотеку Directory API Go и пакет OAuth 2.0:

    go get google.golang.org/api/admin/directory/v1
    go get golang.org/x/oauth2/google
    

Настройка примера

  1. В рабочем каталоге создайте файл с названием quickstart.go.

  2. Вставьте в файл следующий код:

    admin_sdk/directory/quickstart.go
    package main
    
    import (
    	"context"
    	"encoding/json"
    	"fmt"
    	"log"
    	"net/http"
    	"os"
    
    	"golang.org/x/oauth2"
    	"golang.org/x/oauth2/google"
    	admin "google.golang.org/api/admin/directory/v1"
    	"google.golang.org/api/option"
    )
    
    // Retrieve a token, saves the token, then returns the generated client.
    func getClient(config *oauth2.Config) *http.Client {
    	// The file token.json stores the user's access and refresh tokens, and is
    	// created automatically when the authorization flow completes for the first
    	// time.
    	tokFile := "token.json"
    	tok, err := tokenFromFile(tokFile)
    	if err != nil {
    		tok = getTokenFromWeb(config)
    		saveToken(tokFile, tok)
    	}
    	return config.Client(context.Background(), tok)
    }
    
    // Request a token from the web, then returns the retrieved token.
    func getTokenFromWeb(config *oauth2.Config) *oauth2.Token {
    	authURL := config.AuthCodeURL("state-token", oauth2.AccessTypeOffline)
    	fmt.Printf("Go to the following link in your browser then type the "+
    		"authorization code: \n%v\n", authURL)
    
    	var authCode string
    	if _, err := fmt.Scan(&authCode); err != nil {
    		log.Fatalf("Unable to read authorization code: %v", err)
    	}
    
    	tok, err := config.Exchange(context.TODO(), authCode)
    	if err != nil {
    		log.Fatalf("Unable to retrieve token from web: %v", err)
    	}
    	return tok
    }
    
    // Retrieves a token from a local file.
    func tokenFromFile(file string) (*oauth2.Token, error) {
    	f, err := os.Open(file)
    	if err != nil {
    		return nil, err
    	}
    	defer f.Close()
    	tok := &oauth2.Token{}
    	err = json.NewDecoder(f).Decode(tok)
    	return tok, err
    }
    
    // Saves a token to a file path.
    func saveToken(path string, token *oauth2.Token) {
    	fmt.Printf("Saving credential file to: %s\n", path)
    	f, err := os.OpenFile(path, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0600)
    	if err != nil {
    		log.Fatalf("Unable to cache oauth token: %v", err)
    	}
    	defer f.Close()
    	json.NewEncoder(f).Encode(token)
    }
    
    func main() {
    	ctx := context.Background()
    	b, err := os.ReadFile("credentials.json")
    	if err != nil {
    		log.Fatalf("Unable to read client secret file: %v", err)
    	}
    
    	// If modifying these scopes, delete your previously saved token.json.
    	config, err := google.ConfigFromJSON(b, admin.AdminDirectoryUserReadonlyScope)
    	if err != nil {
    		log.Fatalf("Unable to parse client secret file to config: %v", err)
    	}
    	client := getClient(config)
    
    	srv, err := admin.NewService(ctx, option.WithHTTPClient(client))
    	if err != nil {
    		log.Fatalf("Unable to retrieve directory Client %v", err)
    	}
    
    	r, err := srv.Users.List().Customer("my_customer").MaxResults(10).
    		OrderBy("email").Do()
    	if err != nil {
    		log.Fatalf("Unable to retrieve users in domain: %v", err)
    	}
    
    	if len(r.Users) == 0 {
    		fmt.Print("No users found.\n")
    	} else {
    		fmt.Print("Users:\n")
    		for _, u := range r.Users {
    			fmt.Printf("%s (%s)\n", u.PrimaryEmail, u.Name.FullName)
    		}
    	}
    }

Запустите пример

  1. В рабочем каталоге создайте и запустите образец:

    go run quickstart.go
    
  1. При первом запуске примера вам будет предложено авторизовать доступ:
    1. Если вы ещё не вошли в аккаунт Google, сделайте это. Если вы вошли в несколько аккаунтов, выберите один из них для авторизации.
    2. Нажмите Принимаю.

    Приложение Go запустится и вызовет Directory API.

    Информация об авторизации сохраняется в файловой системе, поэтому при следующем запуске примера кода вам не потребуется проходить авторизацию.

Дальнейшие действия