В этом руководстве объясняется, как использовать OAuth 2.0 с учетными данными пользователей Google для доступа к Chat API . Аутентификация и авторизация с использованием учетных данных пользователя позволяют приложениям чата получать доступ к пользовательским данным и выполнять операции от имени проверенного пользователя. Проходя аутентификацию от имени пользователя, приложение получает те же разрешения, что и этот пользователь, и может выполнять действия, как если бы они были выполнены этим пользователем.
После аутентификации и авторизации вызова API с учетными данными пользователя приложения чата могут выполнять следующие действия:
- Создавайте чат-группы.
- Добавляйте пользователей в чаты и групповые беседы.
- Работайте с пользовательскими данными в других API Workspace, например следующих:
- Создавайте события в Календаре Google.
- Записывайте элементы в Google Таблицы.
- Отправьте электронное письмо с помощью Gmail.
Когда приложение выполняет действие с аутентификацией пользователя (например, создает пространство), Google Chat отображает сообщение об атрибуции, в котором сообщается имя приложения, выполнившего действие для пользователя, который его авторизовал.
Дополнительные сведения о том, когда приложениям Chat требуется проверка подлинности и какой тип проверки подлинности следует использовать, см. в разделе Типы необходимой проверки подлинности в обзоре проверки подлинности и авторизации Chat API.
Аутентификация и авторизация в качестве администратора Google Workspace.
В этом разделе объясняется, как администраторы рабочих пространств Google Workspace могут управлять приложениями и пространствами Google Chat в своей организации с помощью аутентификации пользователей.
Аутентификация и авторизация с использованием делегирования на уровне домена
Если вы администратор домена, вы можете делегировать полномочия на уровне домена, чтобы разрешить сервисному аккаунту приложения доступ к данным ваших пользователей, не требуя согласия каждого пользователя. После настройки делегирования на уровне домена учетная запись службы может выдавать себя за учетную запись пользователя . Хотя для аутентификации используется учетная запись службы, делегирование на уровне домена выдает себя за пользователя и поэтому считается аутентификацией пользователя . Любую функциональность, требующую аутентификации пользователя, можно использовать делегирование на уровне домена.
Аутентификация и авторизация с использованием прав администратора
Если вы администратор домена или делегированный администратор с правами администратора , вы можете аутентифицировать и авторизовать свои вызовы к Google Chat API с правами администратора, установив поле useAdminAccess
в запросах применимых методов. Дополнительную информацию см. в справочной документации API .
Обратите внимание: когда приложение Google Chat выполняет действие с правами администратора, Chat не сообщает пользователям имя приложения Chat, выполнившего это действие, или имя администратора, который его авторизовал, а только сообщает пользователям, что действие выполняется их администратор организации.
Предварительные условия
Ява
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- JDK 1.7 или более поздняя версия
- Инструмент управления пакетами Maven
- Инициализированный проект Maven. Чтобы инициализировать новый проект, выполните следующую команду в интерфейсе командной строки:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Питон
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Python 3.6 или выше
- Инструмент управления пакетами pip
Node.js
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Node.js 14 или более поздней версии
- Инструмент управления пакетами npm
- Инициализированный проект Node.js. Чтобы инициализировать новый проект, создайте новую папку и переключитесь на нее, затем выполните следующую команду в интерфейсе командной строки:
npm init
Скрипт приложений
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Создайте автономный проект Apps Script и включите расширенную службу чата .
Шаг 1. Настройте экран согласия OAuth, укажите области действия и зарегистрируйте свое приложение.
Когда вы используете OAuth 2.0 для авторизации, Google отображает пользователю экран согласия, включающий краткую информацию о вашем проекте, его политиках и запрашиваемые области авторизации. Настройка экрана согласия OAuth вашего приложения определяет, что Google отображает пользователям и рецензентам приложения, а также регистрирует ваше приложение, чтобы вы могли опубликовать его позже.
Для всех приложений, использующих OAuth 2.0, требуется настройка экрана согласия, но вам нужно указать только области действия для приложений, используемых людьми за пределами вашей организации Google Workspace.
В консоли Google Cloud выберите > API и службы > Экран согласия OAuth .
Выберите тип пользователя для вашего приложения, затем нажмите «Создать» .
Заполните форму регистрации приложения, затем нажмите « Сохранить и продолжить» .
Нажмите «Добавить или удалить области» . Добавьте и проверьте области авторизации, необходимые вашему приложению, нажмите «Обновить» , затем нажмите « Сохранить и продолжить» .
Просмотрите сводную информацию о регистрации приложения. Нажмите «Изменить» , чтобы внести изменения, или нажмите «Вернуться на панель мониторинга» .
Шаг 2. Создайте учетные данные идентификатора клиента OAuth в консоли Google Cloud.
Чтобы пройти аутентификацию в качестве конечного пользователя и получить доступ к пользовательским данным в вашем приложении, вам необходимо создать один или несколько идентификаторов клиента OAuth 2.0 . Идентификатор клиента используется для идентификации одного приложения на серверах Google OAuth. Если ваше приложение работает на нескольких платформах, таких как Android, iOS и Интернет, вам необходимо создать отдельный идентификатор клиента для каждой платформы.
Создайте учетные данные идентификатора клиента OAuth.
Выберите тип приложения для получения конкретных инструкций о том, как создать идентификатор клиента OAuth:
Веб-приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Веб-приложение .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Добавьте авторизованные URI, связанные с вашим приложением:
- Клиентские приложения (JavaScript) . В разделе «Авторизованные источники JavaScript» нажмите « Добавить URI» . Затем введите URI, который будет использоваться для запросов браузера. Это определяет домены, из которых ваше приложение может отправлять запросы API на сервер OAuth 2.0.
- Серверные приложения (Java, Python и т. д.) – в разделе «Авторизованные URI перенаправления» нажмите « Добавить URI» . Затем введите URI конечной точки, на который сервер OAuth 2.0 может отправлять ответы.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
Обратите внимание на идентификатор клиента. Секреты клиента не используются для веб-приложений.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0» .
Андроид
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Android .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Имя пакета» введите имя пакета из файла
AndroidManifest.xml
. - В поле «Отпечаток сертификата SHA-1» введите сгенерированный отпечаток сертификата SHA-1 .
- Нажмите Создать . Появится экран создания клиента OAuth, на котором будет показан ваш новый идентификатор клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
iOS
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > iOS .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор пакета» введите идентификатор пакета, указанный в файле
Info.plist
приложения. - Необязательно: если ваше приложение появилось в Apple App Store, введите идентификатор App Store.
- Необязательно: в поле «Идентификатор команды» введите уникальную строку из 10 символов, созданную Apple и назначенную вашей команде.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Приложение Chrome
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение Chrome .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор приложения» введите уникальную 32-значную строку идентификатора вашего приложения. Это значение идентификатора можно найти в URL-адресе Интернет-магазина Chrome вашего приложения и на панели инструментов разработчика Интернет-магазина Chrome .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Настольное приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение для ПК .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Телевизоры и ограниченные устройства ввода
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите «Тип приложения» > «Телевизоры и устройства с ограниченным вводом» .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Универсальная платформа Windows (UWP)
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Универсальная платформа Windows (UWP) .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор магазина» введите уникальное 12-значное значение идентификатора Microsoft Store вашего приложения. Этот идентификатор можно найти в URL-адресе вашего приложения в Microsoft Store и в Центре партнеров .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Загрузите JSON-файл секретного клиента.
Секретный файл клиента — это JSON-представление учетных данных идентификатора клиента OAuth, на которое ваше приложение чата может ссылаться при предоставлении учетных данных.
В консоли Google Cloud выберите > API и службы > Учетные данные .
В разделе «Идентификаторы клиентов OAuth 2.0» щелкните созданный вами идентификатор клиента.
Нажмите «Загрузить JSON» .
Сохраните файл как
client_secrets.json
.
Шаг 3. Установите клиентскую библиотеку Google и другие зависимости.
Установите клиентскую библиотеку Google и другие зависимости, необходимые для проекта.
Ява
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Maven, отредактируйте файл pom.xml
в каталоге вашего проекта и добавьте следующие зависимости:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.34.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Питон
Если вы еще не установили клиентские библиотеки Google для Python, выполните следующую команду в интерфейсе командной строки:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
Node.js
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Node.js, перейдите в каталог вашего проекта и выполните следующую команду в интерфейсе командной строки:
npm install "@googleapis/chat" open server-destroy
Скрипт приложений
В этом примере используется служба Advanced Chat для вызова API Google Chat. Чтобы включить службу для проекта Apps Script:
- Слева нажмите редактора» .
- Слева рядом с пунктом «Услуги» нажмите услугу» .
- Выберите API Чата Google .
- В разделе «Версия» выберите v1 .
- Нажмите Добавить .
Вы можете использовать любой язык, поддерживаемый нашими клиентскими библиотеками .
Шаг 4. Напишите сценарий, вызывающий API чата.
Вызов API с авторизацией OAuth — многоэтапный процесс. В веб-приложениях или настольных приложениях процесс обычно выглядит следующим образом:
- Приложение направляет пользователя на страницу авторизации, запрашивая доступ к данным пользователя, указанным в областях авторизации. Приложение идентифицирует себя с помощью учетных данных идентификатора клиента.
- Пользователь просматривает разрешения, запрошенные приложением, и утверждает запрос.
- Сервер аутентификации Google перенаправляет браузер на конечную точку HTTP приложения вместе с кодом авторизации.
- Приложение отправляет еще один запрос на сервер авторизации Google для обмена кода авторизации на токен доступа.
- Приложение использует токен доступа для вызова API от имени пользователя.
Дополнительные сведения о процессе авторизации OAuth см. в Руководстве по использованию OAuth 2.0 для доступа к API Google .
В следующих примерах кода на Java, Python и Node.js для выполнения потока авторизации OAuth используется клиентская библиотека . Он открывает локальный HTTP-сервер для получения обратно кода авторизации от сервера авторизации, который затем обменивается на токен доступа. В примере кода Apps Script этот поток авторизации обрабатывается Apps Script.
После завершения процесса аутентификации сценарий проверяет подлинность с помощью Chat API, используя токен доступа пользователя, а затем создает пространство.
Ява
- В каталоге вашего проекта откройте файл
src/main/java/com/google/chat/app/authsample/App.java
. Замените содержимое
App.java
следующим кодом:package com.google.chat.app.authsample; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Space; import java.io.InputStreamReader; import java.util.Collection; import java.util.Collections; /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ public class App { // Application OAuth credentials. private static final String KEYS_RESOURCE_URI = "/client_secrets.json"; // Define your app's authorization scopes. private static final Collection<String> SCOPES = Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create"); // Directory to store user credentials. private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app"); // Global instance of the JSON factory. private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); // Global instance of the HTTP transport. private static HttpTransport httpTransport; // Global instance of the DataStoreFactory. The best practice is to make it a single // globally shared instance across your application. private static FileDataStoreFactory dataStoreFactory; public static void main( String[] args ) { try { // Run app. httpTransport = GoogleNetHttpTransport.newTrustedTransport(); dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); Credential userCredential = authorize(); Space response = App.createChatSpace(userCredential); // Print details about the created space. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } /** * Authorizes the installed application to access user's protected data. */ private static Credential authorize() throws Exception { // Load client secrets. GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json"))); // Set up authorization code flow. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(dataStoreFactory) .build(); // Authorize. return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } /** * Creates a Chat space. */ private static Space createChatSpace(Credential userCredential) throws Exception { // Build the Chat API client and authenticate with the user account. HangoutsChat chatService = new HangoutsChat.Builder( httpTransport, JSON_FACTORY, userCredential) .setApplicationName("auth-sample-app") .build(); // Create a Chat space. Space space = new Space() // To create a named space, set spaceType to SPACE. .setSpaceType("SPACE") // The user-visible name of the space. .setDisplayName("API-made"); return chatService.spaces().create(space).execute(); } }
Создайте новый подкаталог с именем
resources
в каталоге вашего проекта.Скопируйте файл
client_secrets.json
в подкаталогresources
.Чтобы настроить Maven для включения файла секретов клиента в пакет проекта, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Чтобы настроить Maven для включения зависимостей в пакет проекта и выполнения основного класса вашего приложения, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Питон
Сохраните следующий код в файле с
chat_space_create_named.py
в том же каталоге, где находитсяclient_secrets.json
:from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"] def main(): ''' Authenticates with Chat API via user credentials, then creates a Chat space. ''' flow = InstalledAppFlow.from_client_secrets_file( 'client_secrets.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. service = build('chat', 'v1', credentials=creds) # Use the service endpoint to call Chat API. result = service.spaces().create( # Details about the space to create. body = { # To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', # The user-visible name of the space. 'displayName': 'API-made' } ).execute() # Prints details about the created space. print(result) if __name__ == '__main__': main()
Node.js
Сохраните следующий код в файле с
chat_space_create_named.js
в том же каталоге, где хранятся проект Node.js иclient_secrets.json
:const fs = require('fs'); const path = require('path'); const http = require('http'); const url = require('url'); const destroyer = require('server-destroy'); const chat = require('@googleapis/chat'); // Application OAuth credentials. const keys = require('./client_secrets.json').installed; // Define your app's authorization scopes. // When modifying these scopes, delete the file token.json, if it exists. const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"]; // Create a new OAuth2 client with the configured keys. const oauth2Client = new chat.auth.OAuth2( keys.client_id, keys.client_secret, 'http://localhost:3000' ); /** * Opens an HTTP server to accept the OAuth callback. * In this simple example, the only request to our webserver is to /?code=<code>. */ async function authenticate(scopes) { const opn = (await import('open')).default; return new Promise((resolve, reject) => { // Generate the URL for authorization. const authorizeUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes.join(' '), }); // Start the HTTP server to listen for the callback. const server = http .createServer(async (req, res) => { try { const qs = new url.URL(req.url, 'http://localhost:3000').searchParams; res.end('Authentication successful! Please return to the console.'); server.destroy(); const { tokens } = await oauth2Client.getToken(qs.get('code')); oauth2Client.credentials = tokens; resolve(oauth2Client); } catch (e) { reject(e); } }) .listen(3000, () => { // Open the browser to the authorize URL to start the workflow. opn(authorizeUrl, { wait: false }).then(cp => cp.unref()); }); destroyer(server); }); } /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ async function createSpace() { // Create the Chat API client and authenticate with the authorized user. const chatClient = await chat.chat({ version: 'v1', auth: oauth2Client }); // Call the Chat API to create a space. const result = await chatClient.spaces.create({ // Details about the space to create. requestBody: { // To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', // The user-visible name of the space. 'displayName': 'API-made' } }); return result; } // Authenticate the user, execute the function, // then print details about the created space. authenticate(scopes) .then(createSpace) .then(console.log);
Скрипт приложений
В редакторе Apps Script отредактируйте файл
appsscript.json
и добавьте область OAuth, необходимую для вызова API:"oauthScopes": [ "https://www.googleapis.com/auth/chat.spaces.create" ]
Сохраните следующий код в файле
ChatSpaceCreateNamed.gs
в своем проекте Apps Script:/** * Authenticates with Chat API via user credentials, then creates a * Chat space. */ function createSpace() { try { // Details about the space to create. // To create a named space, set spaceType to SPACE. // The user-visible name of the space is displayName. const space = {'displayName': 'API-made', 'spaceType': 'SPACE'}; // Call Chat API with user credentials to create the space. const result = Chat.Spaces.create(space); // Log details about the created space. console.log(result); } catch (err) { // TODO (developer) - Handle exception console.log('Failed to create space with error %s', err.message); } }
Шаг 5. Запустите пример сценария.
Чтобы запустить пример, из командной строки перейдите в каталог, содержащий файлы вашего проекта, затем выполните следующую команду:
Ява
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Питон
python3 chat_space_create_named.py
Node.js
node chat_space_create_named.js
Скрипт приложений
Откройте файл ChatSpaceCreateNamed.gs
в редакторе сценариев приложений и нажмите « Выполнить» .
Откроется браузер и предложит вам войти в свою учетную запись Google:
После входа в систему появится экран согласия OAuth, на котором вас попросят предоставить разрешение приложению.
После того как вы предоставите разрешение, сценарий вызывает API чата , который в ответ создает пространство чата с отображаемым именем API-made
. Консоль печатает подробную информацию о вызове API. Чтобы найти пространство, перейдите на панель «Пробелы» в Google Chat.
Устранение неполадок в примере
При chat_space_create_named.py
вы можете получить сообщение об ошибке:
Expected a JSON object with a single property for a "web" or "installed" application
Это сообщение об ошибке означает, что файл client_secrets.json
, который вы скачали из консоли Google Cloud, не начинается со свойства "web"
или "installed"
. Если после аутентификации с помощью загруженного файла ваш код не сохраняет токен доступа в новом файле, таком как token.json
, то токен доступа записывается в client_secrets.json
, что может вызвать эту ошибку при последующих попытках авторизации.
Чтобы устранить ошибку, снова загрузите секретный файл клиента из консоли Google Cloud и сохраните новый файл на месте текущего файла.
Связанные темы
Если вашему приложению необходимо продолжать использовать токены пользователей за пределами одного потока, оно может сохранить токены для их повторного использования позже. В этом случае вашему приложению необходимо безопасно обрабатывать токены пользователей, а также обрабатывать отзыв и истечение срока действия токена обновления. Дополнительную информацию см. в разделе «Руководство по передовому опыту использования OAuth 2.0» .
Узнайте, на что еще способен Chat API, из справочной документации Chat API .
В этом руководстве объясняется, как использовать OAuth 2.0 с учетными данными пользователей Google для доступа к Chat API . Аутентификация и авторизация с использованием учетных данных пользователя позволяют приложениям чата получать доступ к пользовательским данным и выполнять операции от имени проверенного пользователя. Проходя аутентификацию от имени пользователя, приложение получает те же разрешения, что и этот пользователь, и может выполнять действия, как если бы они были выполнены этим пользователем.
После аутентификации и авторизации вызова API с учетными данными пользователя приложения чата могут выполнять следующие действия:
- Создавайте чат-группы.
- Добавляйте пользователей в чаты и групповые беседы.
- Работайте с пользовательскими данными в других API Workspace, например следующих:
- Создавайте события в Календаре Google.
- Записывайте элементы в Google Таблицы.
- Отправьте электронное письмо с помощью Gmail.
Когда приложение выполняет действие с аутентификацией пользователя (например, создает пространство), Google Chat отображает сообщение об атрибуции, в котором сообщается имя приложения, выполнившего действие для пользователя, который его авторизовал.
Дополнительные сведения о том, когда приложениям Chat требуется проверка подлинности и какой тип проверки подлинности следует использовать, см. в разделе Типы необходимой проверки подлинности в обзоре проверки подлинности и авторизации Chat API.
Аутентификация и авторизация в качестве администратора Google Workspace.
В этом разделе объясняется, как администраторы рабочих пространств Google Workspace могут управлять приложениями и пространствами Google Chat в своей организации с помощью аутентификации пользователей.
Аутентификация и авторизация с использованием делегирования на уровне домена
Если вы администратор домена, вы можете делегировать полномочия на уровне домена, чтобы разрешить сервисному аккаунту приложения доступ к данным ваших пользователей, не требуя согласия каждого пользователя. После настройки делегирования на уровне домена учетная запись службы может выдавать себя за учетную запись пользователя . Хотя для аутентификации используется учетная запись службы, делегирование на уровне домена выдает себя за пользователя и поэтому считается аутентификацией пользователя . Любую функциональность, требующую аутентификации пользователя, можно использовать делегирование на уровне домена.
Аутентификация и авторизация с использованием прав администратора
Если вы администратор домена или делегированный администратор с правами администратора , вы можете аутентифицировать и авторизовать свои вызовы к Google Chat API с правами администратора, установив поле useAdminAccess
в запросах применимых методов. Дополнительную информацию см. в справочной документации API .
Обратите внимание: когда приложение Google Chat выполняет действие с правами администратора, Chat не сообщает пользователям имя приложения Chat, выполнившего это действие, или имя администратора, который его авторизовал, а только сообщает пользователям, что действие выполняется их администратор организации.
Предварительные условия
Ява
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- JDK 1.7 или более поздняя версия
- Инструмент управления пакетами Maven
- Инициализированный проект Maven. Чтобы инициализировать новый проект, выполните следующую команду в интерфейсе командной строки:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Питон
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Python 3.6 или выше
- Инструмент управления пакетами pip
Node.js
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Node.js 14 или более поздней версии
- Инструмент управления пакетами npm
- Инициализированный проект Node.js. Чтобы инициализировать новый проект, создайте новую папку и переключитесь на нее, затем выполните следующую команду в интерфейсе командной строки:
npm init
Скрипт приложений
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Создайте автономный проект Apps Script и включите расширенную службу чата .
Шаг 1. Настройте экран согласия OAuth, укажите области действия и зарегистрируйте свое приложение.
Когда вы используете OAuth 2.0 для авторизации, Google отображает пользователю экран согласия, включающий краткую информацию о вашем проекте, его политиках и запрашиваемые области авторизации. Настройка экрана согласия OAuth вашего приложения определяет, что Google отображает пользователям и рецензентам приложения, а также регистрирует ваше приложение, чтобы вы могли опубликовать его позже.
Для всех приложений, использующих OAuth 2.0, требуется настройка экрана согласия, но вам нужно указать только области действия для приложений, используемых людьми за пределами вашей организации Google Workspace.
В консоли Google Cloud выберите > API и службы > Экран согласия OAuth .
Выберите тип пользователя для вашего приложения, затем нажмите «Создать» .
Заполните форму регистрации приложения, затем нажмите « Сохранить и продолжить» .
Нажмите «Добавить или удалить области» . Добавьте и проверьте области авторизации, необходимые вашему приложению, нажмите «Обновить» , затем нажмите « Сохранить и продолжить» .
Просмотрите сводную информацию о регистрации приложения. Нажмите «Изменить» , чтобы внести изменения, или нажмите «Вернуться на панель мониторинга» .
Шаг 2. Создайте учетные данные идентификатора клиента OAuth в консоли Google Cloud.
Чтобы пройти аутентификацию в качестве конечного пользователя и получить доступ к пользовательским данным в вашем приложении, вам необходимо создать один или несколько идентификаторов клиента OAuth 2.0 . Идентификатор клиента используется для идентификации одного приложения на серверах Google OAuth. Если ваше приложение работает на нескольких платформах, таких как Android, iOS и Интернет, вам необходимо создать отдельный идентификатор клиента для каждой платформы.
Создайте учетные данные идентификатора клиента OAuth.
Выберите тип приложения для получения конкретных инструкций о том, как создать идентификатор клиента OAuth:
Веб-приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Веб-приложение .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Добавьте авторизованные URI, связанные с вашим приложением:
- Клиентские приложения (JavaScript) . В разделе «Авторизованные источники JavaScript» нажмите « Добавить URI» . Затем введите URI, который будет использоваться для запросов браузера. Это определяет домены, из которых ваше приложение может отправлять запросы API на сервер OAuth 2.0.
- Серверные приложения (Java, Python и т. д.) – в разделе «Авторизованные URI перенаправления» нажмите « Добавить URI» . Затем введите URI конечной точки, на который сервер OAuth 2.0 может отправлять ответы.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
Обратите внимание на идентификатор клиента. Секреты клиента не используются для веб-приложений.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0» .
Андроид
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Android .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Имя пакета» введите имя пакета из файла
AndroidManifest.xml
. - В поле «Отпечаток сертификата SHA-1» введите сгенерированный отпечаток сертификата SHA-1 .
- Нажмите Создать . Появится экран создания клиента OAuth, на котором будет показан ваш новый идентификатор клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
iOS
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > iOS .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор пакета» введите идентификатор пакета, указанный в файле
Info.plist
приложения. - Необязательно: если ваше приложение появилось в Apple App Store, введите идентификатор App Store.
- Необязательно: в поле «Идентификатор команды» введите уникальную строку из 10 символов, созданную Apple и назначенную вашей команде.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Приложение Chrome
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение Chrome .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор приложения» введите уникальную 32-значную строку идентификатора вашего приложения. Это значение идентификатора можно найти в URL-адресе Интернет-магазина Chrome вашего приложения и на панели инструментов разработчика Интернет-магазина Chrome .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Настольное приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение для ПК .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Телевизоры и ограниченные устройства ввода
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите «Тип приложения» > «Телевизоры и устройства с ограниченным вводом» .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Универсальная платформа Windows (UWP)
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Универсальная платформа Windows (UWP) .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор магазина» введите уникальное 12-значное значение идентификатора Microsoft Store вашего приложения. Этот идентификатор можно найти в URL-адресе вашего приложения в Microsoft Store и в Центре партнеров .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Загрузите JSON-файл секретного клиента.
Секретный файл клиента — это JSON-представление учетных данных идентификатора клиента OAuth, на которое ваше приложение чата может ссылаться при предоставлении учетных данных.
В консоли Google Cloud выберите > API и службы > Учетные данные .
В разделе «Идентификаторы клиентов OAuth 2.0» щелкните созданный вами идентификатор клиента.
Нажмите «Загрузить JSON» .
Сохраните файл как
client_secrets.json
.
Шаг 3. Установите клиентскую библиотеку Google и другие зависимости.
Установите клиентскую библиотеку Google и другие зависимости, необходимые для проекта.
Ява
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Maven, отредактируйте файл pom.xml
в каталоге вашего проекта и добавьте следующие зависимости:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.34.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Питон
Если вы еще не установили клиентские библиотеки Google для Python, выполните следующую команду в интерфейсе командной строки:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
Node.js
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Node.js, перейдите в каталог вашего проекта и выполните следующую команду в интерфейсе командной строки:
npm install "@googleapis/chat" open server-destroy
Скрипт приложений
В этом примере используется служба Advanced Chat для вызова API Google Chat. Чтобы включить службу для проекта Apps Script:
- Слева нажмите редактора» .
- Слева рядом с пунктом «Услуги» нажмите услугу» .
- Выберите API Чата Google .
- В разделе «Версия» выберите v1 .
- Нажмите Добавить .
Вы можете использовать любой язык, поддерживаемый нашими клиентскими библиотеками .
Шаг 4. Напишите сценарий, вызывающий API чата.
Вызов API с авторизацией OAuth — многоэтапный процесс. В веб-приложениях или настольных приложениях процесс обычно выглядит следующим образом:
- Приложение направляет пользователя на страницу авторизации, запрашивая доступ к данным пользователя, указанным в областях авторизации. Приложение идентифицирует себя с помощью учетных данных идентификатора клиента.
- Пользователь просматривает разрешения, запрошенные приложением, и утверждает запрос.
- Сервер аутентификации Google перенаправляет браузер на конечную точку HTTP приложения вместе с кодом авторизации.
- Приложение отправляет еще один запрос на сервер авторизации Google для обмена кода авторизации на токен доступа.
- Приложение использует токен доступа для вызова API от имени пользователя.
Дополнительные сведения о процессе авторизации OAuth см. в Руководстве по использованию OAuth 2.0 для доступа к API Google .
В следующих примерах кода на Java, Python и Node.js для выполнения потока авторизации OAuth используется клиентская библиотека . Он открывает локальный HTTP-сервер для получения обратно кода авторизации от сервера авторизации, который затем обменивается на токен доступа. В примере кода Apps Script этот поток авторизации обрабатывается Apps Script.
После завершения процесса аутентификации сценарий проверяет подлинность с помощью Chat API, используя токен доступа пользователя, а затем создает пространство.
Ява
- В каталоге вашего проекта откройте файл
src/main/java/com/google/chat/app/authsample/App.java
. Замените содержимое
App.java
следующим кодом:package com.google.chat.app.authsample; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Space; import java.io.InputStreamReader; import java.util.Collection; import java.util.Collections; /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ public class App { // Application OAuth credentials. private static final String KEYS_RESOURCE_URI = "/client_secrets.json"; // Define your app's authorization scopes. private static final Collection<String> SCOPES = Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create"); // Directory to store user credentials. private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app"); // Global instance of the JSON factory. private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); // Global instance of the HTTP transport. private static HttpTransport httpTransport; // Global instance of the DataStoreFactory. The best practice is to make it a single // globally shared instance across your application. private static FileDataStoreFactory dataStoreFactory; public static void main( String[] args ) { try { // Run app. httpTransport = GoogleNetHttpTransport.newTrustedTransport(); dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); Credential userCredential = authorize(); Space response = App.createChatSpace(userCredential); // Print details about the created space. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } /** * Authorizes the installed application to access user's protected data. */ private static Credential authorize() throws Exception { // Load client secrets. GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json"))); // Set up authorization code flow. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(dataStoreFactory) .build(); // Authorize. return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } /** * Creates a Chat space. */ private static Space createChatSpace(Credential userCredential) throws Exception { // Build the Chat API client and authenticate with the user account. HangoutsChat chatService = new HangoutsChat.Builder( httpTransport, JSON_FACTORY, userCredential) .setApplicationName("auth-sample-app") .build(); // Create a Chat space. Space space = new Space() // To create a named space, set spaceType to SPACE. .setSpaceType("SPACE") // The user-visible name of the space. .setDisplayName("API-made"); return chatService.spaces().create(space).execute(); } }
Создайте новый подкаталог с именем
resources
в каталоге вашего проекта.Скопируйте файл
client_secrets.json
в подкаталогresources
.Чтобы настроить Maven для включения файла секретов клиента в пакет проекта, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Чтобы настроить Maven для включения зависимостей в пакет проекта и выполнения основного класса вашего приложения, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Питон
Сохраните следующий код в файле с
chat_space_create_named.py
в том же каталоге, где находитсяclient_secrets.json
:from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"] def main(): ''' Authenticates with Chat API via user credentials, then creates a Chat space. ''' flow = InstalledAppFlow.from_client_secrets_file( 'client_secrets.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. service = build('chat', 'v1', credentials=creds) # Use the service endpoint to call Chat API. result = service.spaces().create( # Details about the space to create. body = { # To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', # The user-visible name of the space. 'displayName': 'API-made' } ).execute() # Prints details about the created space. print(result) if __name__ == '__main__': main()
Node.js
Сохраните следующий код в файле с
chat_space_create_named.js
в том же каталоге, где хранятся проект Node.js иclient_secrets.json
:const fs = require('fs'); const path = require('path'); const http = require('http'); const url = require('url'); const destroyer = require('server-destroy'); const chat = require('@googleapis/chat'); // Application OAuth credentials. const keys = require('./client_secrets.json').installed; // Define your app's authorization scopes. // When modifying these scopes, delete the file token.json, if it exists. const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"]; // Create a new OAuth2 client with the configured keys. const oauth2Client = new chat.auth.OAuth2( keys.client_id, keys.client_secret, 'http://localhost:3000' ); /** * Opens an HTTP server to accept the OAuth callback. * In this simple example, the only request to our webserver is to /?code=<code>. */ async function authenticate(scopes) { const opn = (await import('open')).default; return new Promise((resolve, reject) => { // Generate the URL for authorization. const authorizeUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes.join(' '), }); // Start the HTTP server to listen for the callback. const server = http .createServer(async (req, res) => { try { const qs = new url.URL(req.url, 'http://localhost:3000').searchParams; res.end('Authentication successful! Please return to the console.'); server.destroy(); const { tokens } = await oauth2Client.getToken(qs.get('code')); oauth2Client.credentials = tokens; resolve(oauth2Client); } catch (e) { reject(e); } }) .listen(3000, () => { // Open the browser to the authorize URL to start the workflow. opn(authorizeUrl, { wait: false }).then(cp => cp.unref()); }); destroyer(server); }); } /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ async function createSpace() { // Create the Chat API client and authenticate with the authorized user. const chatClient = await chat.chat({ version: 'v1', auth: oauth2Client }); // Call the Chat API to create a space. const result = await chatClient.spaces.create({ // Details about the space to create. requestBody: { // To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', // The user-visible name of the space. 'displayName': 'API-made' } }); return result; } // Authenticate the user, execute the function, // then print details about the created space. authenticate(scopes) .then(createSpace) .then(console.log);
Скрипт приложений
В редакторе Apps Script отредактируйте файл
appsscript.json
и добавьте область OAuth, необходимую для вызова API:"oauthScopes": [ "https://www.googleapis.com/auth/chat.spaces.create" ]
Сохраните следующий код в файле
ChatSpaceCreateNamed.gs
в своем проекте Apps Script:/** * Authenticates with Chat API via user credentials, then creates a * Chat space. */ function createSpace() { try { // Details about the space to create. // To create a named space, set spaceType to SPACE. // The user-visible name of the space is displayName. const space = {'displayName': 'API-made', 'spaceType': 'SPACE'}; // Call Chat API with user credentials to create the space. const result = Chat.Spaces.create(space); // Log details about the created space. console.log(result); } catch (err) { // TODO (developer) - Handle exception console.log('Failed to create space with error %s', err.message); } }
Шаг 5. Запустите пример сценария.
Чтобы запустить пример, из командной строки перейдите в каталог, содержащий файлы вашего проекта, затем выполните следующую команду:
Ява
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Питон
python3 chat_space_create_named.py
Node.js
node chat_space_create_named.js
Скрипт приложений
Откройте файл ChatSpaceCreateNamed.gs
в редакторе сценариев приложений и нажмите « Выполнить» .
Откроется браузер и предложит вам войти в свою учетную запись Google:
После входа в систему появится экран согласия OAuth, на котором вас попросят предоставить разрешение приложению.
После того как вы предоставите разрешение, сценарий вызывает API чата , который в ответ создает пространство чата с отображаемым именем API-made
. Консоль печатает подробную информацию о вызове API. Чтобы найти пространство, перейдите на панель «Пробелы» в Google Chat.
Устранение неполадок в примере
При chat_space_create_named.py
вы можете получить сообщение об ошибке:
Expected a JSON object with a single property for a "web" or "installed" application
Это сообщение об ошибке означает, что файл client_secrets.json
, который вы скачали из консоли Google Cloud, не начинается со свойства "web"
или "installed"
. Если после аутентификации с помощью загруженного файла ваш код не сохраняет токен доступа в новом файле, таком как token.json
, то токен доступа записывается в client_secrets.json
, что может вызвать эту ошибку при последующих попытках авторизации.
Чтобы устранить ошибку, снова загрузите секретный файл клиента из консоли Google Cloud и сохраните новый файл на месте текущего файла.
Связанные темы
Если вашему приложению необходимо продолжать использовать токены пользователей за пределами одного потока, оно может сохранить токены для их повторного использования позже. В этом случае вашему приложению необходимо безопасно обрабатывать токены пользователей, а также обрабатывать отзыв и истечение срока действия токена обновления. Дополнительную информацию см. в разделе «Руководство по передовому опыту использования OAuth 2.0» .
Узнайте, на что еще способен Chat API, из справочной документации Chat API .
В этом руководстве объясняется, как использовать OAuth 2.0 с учетными данными пользователей Google для доступа к Chat API . Аутентификация и авторизация с использованием учетных данных пользователя позволяют приложениям чата получать доступ к пользовательским данным и выполнять операции от имени проверенного пользователя. Проходя аутентификацию от имени пользователя, приложение получает те же разрешения, что и этот пользователь, и может выполнять действия, как если бы они были выполнены этим пользователем.
После аутентификации и авторизации вызова API с учетными данными пользователя приложения чата могут выполнять следующие действия:
- Создавайте чат-группы.
- Добавляйте пользователей в чаты и групповые беседы.
- Работайте с пользовательскими данными в других API Workspace, например следующих:
- Создавайте события в Календаре Google.
- Записывайте элементы в Google Таблицы.
- Отправьте электронное письмо с помощью Gmail.
Когда приложение выполняет действие с аутентификацией пользователя (например, создает пространство), Google Chat отображает сообщение об атрибуции, в котором сообщается имя приложения, выполнившего действие для пользователя, который его авторизовал.
Дополнительные сведения о том, когда приложениям Chat требуется проверка подлинности и какой тип проверки подлинности следует использовать, см. в разделе Типы необходимой проверки подлинности в обзоре проверки подлинности и авторизации Chat API.
Аутентификация и авторизация в качестве администратора Google Workspace.
В этом разделе объясняется, как администраторы рабочих пространств Google Workspace могут управлять приложениями и пространствами Google Chat в своей организации с помощью аутентификации пользователей.
Аутентификация и авторизация с использованием делегирования на уровне домена
Если вы администратор домена, вы можете делегировать полномочия на уровне домена, чтобы разрешить сервисному аккаунту приложения доступ к данным ваших пользователей, не требуя согласия каждого пользователя. После настройки делегирования на уровне домена учетная запись службы может выдавать себя за учетную запись пользователя . Хотя для аутентификации используется учетная запись службы, делегирование на уровне домена выдает себя за пользователя и поэтому считается аутентификацией пользователя . Любую функциональность, требующую аутентификации пользователя, можно использовать делегирование на уровне домена.
Аутентификация и авторизация с использованием прав администратора
Если вы администратор домена или делегированный администратор с правами администратора , вы можете аутентифицировать и авторизовать свои вызовы к Google Chat API с правами администратора, установив поле useAdminAccess
в запросах применимых методов. Дополнительную информацию см. в справочной документации API .
Обратите внимание: когда приложение Google Chat выполняет действие с правами администратора, Chat не сообщает пользователям имя приложения Chat, выполнившего это действие, или имя администратора, который его авторизовал, а только сообщает пользователям, что действие выполняется их администратор организации.
Предварительные условия
Ява
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- JDK 1.7 или более поздняя версия
- Инструмент управления пакетами Maven
- Инициализированный проект Maven. Чтобы инициализировать новый проект, выполните следующую команду в интерфейсе командной строки:
mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
Питон
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Python 3.6 или выше
- Инструмент управления пакетами pip
Node.js
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Node.js 14 или более поздней версии
- Инструмент управления пакетами npm
- Инициализированный проект Node.js. Чтобы инициализировать новый проект, создайте новую папку и переключитесь на нее, затем выполните следующую команду в интерфейсе командной строки:
npm init
Скрипт приложений
- Аккаунт Google Workspace для бизнеса или предприятия с доступом к Google Chat .
- Создайте проект Google Cloud .
- Включите и настройте API Google Chat, указав имя, значок и описание для вашего приложения Chat.
- Создайте автономный проект Apps Script и включите расширенную службу чата .
Шаг 1. Настройте экран согласия OAuth, укажите области действия и зарегистрируйте свое приложение.
Когда вы используете OAuth 2.0 для авторизации, Google отображает пользователю экран согласия, включающий краткую информацию о вашем проекте, его политиках и запрашиваемые области авторизации. Настройка экрана согласия OAuth вашего приложения определяет, что Google отображает пользователям и рецензентам приложения, а также регистрирует ваше приложение, чтобы вы могли опубликовать его позже.
Для всех приложений, использующих OAuth 2.0, требуется настройка экрана согласия, но вам нужно указать только области действия для приложений, используемых людьми за пределами вашей организации Google Workspace.
В консоли Google Cloud выберите > API и службы > Экран согласия OAuth .
Выберите тип пользователя для вашего приложения, затем нажмите «Создать» .
Заполните форму регистрации приложения, затем нажмите « Сохранить и продолжить» .
Нажмите «Добавить или удалить области» . Добавьте и проверьте области авторизации, необходимые вашему приложению, нажмите «Обновить» , затем нажмите « Сохранить и продолжить» .
Просмотрите сводную информацию о регистрации приложения. Нажмите «Изменить» , чтобы внести изменения, или нажмите «Вернуться на панель мониторинга» .
Шаг 2. Создайте учетные данные идентификатора клиента OAuth в консоли Google Cloud.
Чтобы пройти аутентификацию в качестве конечного пользователя и получить доступ к пользовательским данным в вашем приложении, вам необходимо создать один или несколько идентификаторов клиента OAuth 2.0 . Идентификатор клиента используется для идентификации одного приложения на серверах Google OAuth. Если ваше приложение работает на нескольких платформах, таких как Android, iOS и Интернет, вам необходимо создать отдельный идентификатор клиента для каждой платформы.
Создайте учетные данные идентификатора клиента OAuth.
Выберите тип приложения для получения конкретных инструкций о том, как создать идентификатор клиента OAuth:
Веб-приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Веб-приложение .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Добавьте авторизованные URI, связанные с вашим приложением:
- Клиентские приложения (JavaScript) . В разделе «Авторизованные источники JavaScript» нажмите « Добавить URI» . Затем введите URI, который будет использоваться для запросов браузера. Это определяет домены, из которых ваше приложение может отправлять запросы API на сервер OAuth 2.0.
- Серверные приложения (Java, Python и т. д.) – в разделе «Авторизованные URI перенаправления» нажмите « Добавить URI» . Затем введите URI конечной точки, на который сервер OAuth 2.0 может отправлять ответы.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
Обратите внимание на идентификатор клиента. Секреты клиента не используются для веб-приложений.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0» .
Андроид
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Android .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Имя пакета» введите имя пакета из файла
AndroidManifest.xml
. - В поле «Отпечаток сертификата SHA-1» введите сгенерированный отпечаток сертификата SHA-1 .
- Нажмите Создать . Появится экран создания клиента OAuth, на котором будет показан ваш новый идентификатор клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
iOS
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > iOS .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор пакета» введите идентификатор пакета, указанный в файле
Info.plist
приложения. - Необязательно: если ваше приложение появилось в Apple App Store, введите идентификатор App Store.
- Необязательно: в поле «Идентификатор команды» введите уникальную строку из 10 символов, созданную Apple и назначенную вашей команде.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Приложение Chrome
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение Chrome .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор приложения» введите уникальную 32-значную строку идентификатора вашего приложения. Это значение идентификатора можно найти в URL-адресе Интернет-магазина Chrome вашего приложения и на панели инструментов разработчика Интернет-магазина Chrome .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Настольное приложение
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите Тип приложения > Приложение для ПК .
- В поле Имя введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Телевизоры и ограниченные устройства ввода
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Нажмите «Тип приложения» > «Телевизоры и устройства с ограниченным вводом» .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Универсальная платформа Windows (UWP)
- В консоли Google Cloud выберите > API и службы > Учетные данные .
- Нажмите «Создать учетные данные» > «Идентификатор клиента OAuth» .
- Щелкните Тип приложения > Универсальная платформа Windows (UWP) .
- В поле «Имя» введите имя учетных данных. Это имя отображается только в консоли Google Cloud.
- В поле «Идентификатор магазина» введите уникальное 12-значное значение идентификатора Microsoft Store вашего приложения. Этот идентификатор можно найти в URL-адресе вашего приложения в Microsoft Store и в Центре партнеров .
- Нажмите Создать . Появится экран создания клиента OAuth, показывающий ваш новый идентификатор клиента и секрет клиента.
- Нажмите ОК . Вновь созданные учетные данные появятся в разделе «Идентификаторы клиентов OAuth 2.0».
Загрузите JSON-файл секретного клиента.
Секретный файл клиента — это JSON-представление учетных данных идентификатора клиента OAuth, на которое ваше приложение чата может ссылаться при предоставлении учетных данных.
В консоли Google Cloud выберите > API и службы > Учетные данные .
В разделе «Идентификаторы клиентов OAuth 2.0» щелкните созданный вами идентификатор клиента.
Нажмите «Загрузить JSON» .
Сохраните файл как
client_secrets.json
.
Шаг 3. Установите клиентскую библиотеку Google и другие зависимости.
Установите клиентскую библиотеку Google и другие зависимости, необходимые для проекта.
Ява
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Maven, отредактируйте файл pom.xml
в каталоге вашего проекта и добавьте следующие зависимости:
<dependencies>
<!-- ... existing dependencies ... -->
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-chat</artifactId>
<version>v1-rev20230905-2.0.0</version>
</dependency>
<dependency>
<groupId>com.google.auth</groupId>
<artifactId>google-auth-library-oauth2-http</artifactId>
<version>1.19.0</version>
</dependency>
<dependency>
<groupId>com.google.oauth-client</groupId>
<artifactId>google-oauth-client-jetty</artifactId>
<version>1.34.1</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.10.1</version>
</dependency>
</dependencies>
Питон
Если вы еще не установили клиентские библиотеки Google для Python, выполните следующую команду в интерфейсе командной строки:
pip3 install --upgrade google-api-python-client google-auth-oauthlib
Node.js
Чтобы добавить клиентские библиотеки Google и другие необходимые зависимости в ваш проект Node.js, перейдите в каталог вашего проекта и выполните следующую команду в интерфейсе командной строки:
npm install "@googleapis/chat" open server-destroy
Скрипт приложений
В этом примере используется служба Advanced Chat для вызова API Google Chat. Чтобы включить службу для проекта Apps Script:
- Слева нажмите редактора» .
- Слева рядом с пунктом «Услуги» нажмите услугу» .
- Выберите API Чата Google .
- В разделе «Версия» выберите v1 .
- Нажмите Добавить .
Вы можете использовать любой язык, поддерживаемый нашими клиентскими библиотеками .
Шаг 4. Напишите сценарий, вызывающий API чата.
Вызов API с авторизацией OAuth — многоэтапный процесс. В веб-приложениях или настольных приложениях процесс обычно выглядит следующим образом:
- Приложение направляет пользователя на страницу авторизации, запрашивая доступ к данным пользователя, указанным в областях авторизации. Приложение идентифицирует себя с помощью учетных данных идентификатора клиента.
- Пользователь просматривает разрешения, запрошенные приложением, и утверждает запрос.
- Сервер аутентификации Google перенаправляет браузер на конечную точку HTTP приложения вместе с кодом авторизации.
- Приложение отправляет еще один запрос на сервер авторизации Google для обмена кода авторизации на токен доступа.
- Приложение использует токен доступа для вызова API от имени пользователя.
Дополнительные сведения о процессе авторизации OAuth см. в Руководстве по использованию OAuth 2.0 для доступа к API Google .
В следующих примерах кода на Java, Python и Node.js для выполнения потока авторизации OAuth используется клиентская библиотека . Он открывает локальный HTTP-сервер для получения обратно кода авторизации от сервера авторизации, который затем обменивается на токен доступа. В примере кода Apps Script этот поток авторизации обрабатывается Apps Script.
После завершения процесса аутентификации сценарий проверяет подлинность с помощью Chat API, используя токен доступа пользователя, а затем создает пространство.
Ява
- В каталоге вашего проекта откройте файл
src/main/java/com/google/chat/app/authsample/App.java
. Замените содержимое
App.java
следующим кодом:package com.google.chat.app.authsample; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow; import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets; import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; import com.google.api.client.http.HttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.gson.GsonFactory; import com.google.api.client.util.store.FileDataStoreFactory; import com.google.api.services.chat.v1.HangoutsChat; import com.google.api.services.chat.v1.model.Space; import java.io.InputStreamReader; import java.util.Collection; import java.util.Collections; /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ public class App { // Application OAuth credentials. private static final String KEYS_RESOURCE_URI = "/client_secrets.json"; // Define your app's authorization scopes. private static final Collection<String> SCOPES = Collections.singleton("https://www.googleapis.com/auth/chat.spaces.create"); // Directory to store user credentials. private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".store/auth-sample-app"); // Global instance of the JSON factory. private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance(); // Global instance of the HTTP transport. private static HttpTransport httpTransport; // Global instance of the DataStoreFactory. The best practice is to make it a single // globally shared instance across your application. private static FileDataStoreFactory dataStoreFactory; public static void main( String[] args ) { try { // Run app. httpTransport = GoogleNetHttpTransport.newTrustedTransport(); dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); Credential userCredential = authorize(); Space response = App.createChatSpace(userCredential); // Print details about the created space. System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } /** * Authorizes the installed application to access user's protected data. */ private static Credential authorize() throws Exception { // Load client secrets. GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(App.class.getResourceAsStream("/client_secrets.json"))); // Set up authorization code flow. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder( httpTransport, JSON_FACTORY, clientSecrets, SCOPES) .setDataStoreFactory(dataStoreFactory) .build(); // Authorize. return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user"); } /** * Creates a Chat space. */ private static Space createChatSpace(Credential userCredential) throws Exception { // Build the Chat API client and authenticate with the user account. HangoutsChat chatService = new HangoutsChat.Builder( httpTransport, JSON_FACTORY, userCredential) .setApplicationName("auth-sample-app") .build(); // Create a Chat space. Space space = new Space() // To create a named space, set spaceType to SPACE. .setSpaceType("SPACE") // The user-visible name of the space. .setDisplayName("API-made"); return chatService.spaces().create(space).execute(); } }
Создайте новый подкаталог с именем
resources
в каталоге вашего проекта.Скопируйте файл
client_secrets.json
в подкаталогresources
.Чтобы настроить Maven для включения файла секретов клиента в пакет проекта, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<build>
:<build> <!-- ... existing configurations ... --> <resources> <resource> <directory>resources</directory> </resource> </resources> </build>
Чтобы настроить Maven для включения зависимостей в пакет проекта и выполнения основного класса вашего приложения, отредактируйте файл
pom.xml
в каталоге вашего проекта и добавьте следующую конфигурацию в раздел<plugins>
:<plugins> <!-- ... existing configurations ... --> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <archive> <manifest> <mainClass>com.google.chat.app.authsample.App</mainClass> </manifest> </archive> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> </configuration> </plugin> </plugins>
Питон
Сохраните следующий код в файле с
chat_space_create_named.py
в том же каталоге, где находитсяclient_secrets.json
:from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build # Define your app's authorization scopes. # When modifying these scopes, delete the file token.json, if it exists. SCOPES = ["https://www.googleapis.com/auth/chat.spaces.create"] def main(): ''' Authenticates with Chat API via user credentials, then creates a Chat space. ''' flow = InstalledAppFlow.from_client_secrets_file( 'client_secrets.json', SCOPES) creds = flow.run_local_server() # Build a service endpoint for Chat API. service = build('chat', 'v1', credentials=creds) # Use the service endpoint to call Chat API. result = service.spaces().create( # Details about the space to create. body = { # To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', # The user-visible name of the space. 'displayName': 'API-made' } ).execute() # Prints details about the created space. print(result) if __name__ == '__main__': main()
Node.js
Сохраните следующий код в файле с
chat_space_create_named.js
в том же каталоге, где хранятся проект Node.js иclient_secrets.json
:const fs = require('fs'); const path = require('path'); const http = require('http'); const url = require('url'); const destroyer = require('server-destroy'); const chat = require('@googleapis/chat'); // Application OAuth credentials. const keys = require('./client_secrets.json').installed; // Define your app's authorization scopes. // When modifying these scopes, delete the file token.json, if it exists. const scopes = ["https://www.googleapis.com/auth/chat.spaces.create"]; // Create a new OAuth2 client with the configured keys. const oauth2Client = new chat.auth.OAuth2( keys.client_id, keys.client_secret, 'http://localhost:3000' ); /** * Opens an HTTP server to accept the OAuth callback. * In this simple example, the only request to our webserver is to /?code=<code>. */ async function authenticate(scopes) { const opn = (await import('open')).default; return new Promise((resolve, reject) => { // Generate the URL for authorization. const authorizeUrl = oauth2Client.generateAuthUrl({ access_type: 'offline', scope: scopes.join(' '), }); // Start the HTTP server to listen for the callback. const server = http .createServer(async (req, res) => { try { const qs = new url.URL(req.url, 'http://localhost:3000').searchParams; res.end('Authentication successful! Please return to the console.'); server.destroy(); const { tokens } = await oauth2Client.getToken(qs.get('code')); oauth2Client.credentials = tokens; resolve(oauth2Client); } catch (e) { reject(e); } }) .listen(3000, () => { // Open the browser to the authorize URL to start the workflow. opn(authorizeUrl, { wait: false }).then(cp => cp.unref()); }); destroyer(server); }); } /** * Authenticates with Chat API via user credentials, then creates a Chat space. */ async function createSpace() { // Create the Chat API client and authenticate with the authorized user. const chatClient = await chat.chat({ version: 'v1', auth: oauth2Client }); // Call the Chat API to create a space. const result = await chatClient.spaces.create({ // Details about the space to create. requestBody: { // To create a named space, set spaceType to SPACE. 'spaceType': 'SPACE', // The user-visible name of the space. 'displayName': 'API-made' } }); return result; } // Authenticate the user, execute the function, // then print details about the created space. authenticate(scopes) .then(createSpace) .then(console.log);
Скрипт приложений
В редакторе Apps Script отредактируйте файл
appsscript.json
и добавьте область OAuth, необходимую для вызова API:"oauthScopes": [ "https://www.googleapis.com/auth/chat.spaces.create" ]
Сохраните следующий код в файле
ChatSpaceCreateNamed.gs
в своем проекте Apps Script:/** * Authenticates with Chat API via user credentials, then creates a * Chat space. */ function createSpace() { try { // Details about the space to create. // To create a named space, set spaceType to SPACE. // The user-visible name of the space is displayName. const space = {'displayName': 'API-made', 'spaceType': 'SPACE'}; // Call Chat API with user credentials to create the space. const result = Chat.Spaces.create(space); // Log details about the created space. console.log(result); } catch (err) { // TODO (developer) - Handle exception console.log('Failed to create space with error %s', err.message); } }
Шаг 5. Запустите пример сценария.
Чтобы запустить пример, из командной строки перейдите в каталог, содержащий файлы вашего проекта, затем выполните следующую команду:
Ява
mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar
Питон
python3 chat_space_create_named.py
Node.js
node chat_space_create_named.js
Скрипт приложений
Откройте файл ChatSpaceCreateNamed.gs
в редакторе сценариев приложений и нажмите « Выполнить» .
Откроется браузер и предложит вам войти в свою учетную запись Google:
После входа в систему появится экран согласия OAuth, на котором вас попросят предоставить разрешение приложению.
После того как вы предоставите разрешение, сценарий вызывает API чата , который в ответ создает пространство чата с отображаемым именем API-made
. Консоль печатает подробную информацию о вызове API. Чтобы найти пространство, перейдите на панель «Пробелы» в Google Chat.
Устранение неполадок в примере
При chat_space_create_named.py
вы можете получить сообщение об ошибке:
Expected a JSON object with a single property for a "web" or "installed" application
Это сообщение об ошибке означает, что файл client_secrets.json
, который вы скачали из консоли Google Cloud, не начинается со свойства "web"
или "installed"
. Если после аутентификации с помощью загруженного файла ваш код не сохраняет токен доступа в новом файле, таком как token.json
, то токен доступа записывается в client_secrets.json
, что может вызвать эту ошибку при последующих попытках авторизации.
Чтобы устранить ошибку, снова загрузите секретный файл клиента из консоли Google Cloud и сохраните новый файл на месте текущего файла.
Связанные темы
Если вашему приложению необходимо продолжать использовать токены пользователей за пределами одного потока, оно может сохранить токены для их повторного использования позже. В этом случае вашему приложению необходимо безопасно обрабатывать токены пользователей, а также обрабатывать отзыв и истечение срока действия токена обновления. Дополнительную информацию см. в разделе «Руководство по передовому опыту использования OAuth 2.0» .
Узнайте, на что еще способен Chat API, из справочной документации Chat API .