Uwierzytelnianie i autoryzacja jako użytkownik Google Chat

Z tego przewodnika dowiesz się, jak używać OAuth 2.0 z danymi logowania Google użytkowników, aby uzyskać dostęp do Chat API. Uwierzytelnianie i autoryzowanie za pomocą danych logowania użytkownika umożliwia aplikacjom do obsługi czatu dostęp do danych użytkownika i wykonywanie operacji w imieniu uwierzytelnionego użytkownika. Aplikacja uwierzytelniająca się w imieniu użytkownika, ma takie same uprawnienia jak ten użytkownik i może wykonywać czynności tak samo jak ten użytkownik.

Po uwierzytelnieniu i autoryzowaniu wywołania interfejsu API za pomocą danych logowania użytkownika aplikacje do obsługi czatu mogą:

  • tworzyć pokoje czatu,
  • dodawać użytkowników do pokoi i rozmów grupowych w Google Chat;
  • Praca z danymi użytkownika w innych interfejsach Workspace API, takich jak:

Gdy aplikacja wykonuje działanie z uwierzytelnieniem użytkownika (np. tworzy pokój), Google Chat wyświetla komunikat informujący o autorze, który zawiera nazwę aplikacji, która wykonała działanie w imieniu użytkownika, który ją autoryzował.

Aplikacja Google Chat tworzy pokój dla użytkownika.
Rysunek 1 Komunikat przypisujący, który Google Chat wyświetla, gdy aplikacja Google Chat tworzy pokój w imieniu użytkownika.

Więcej informacji o tym, kiedy aplikacje Google Chat wymagają uwierzytelniania i jakiego rodzaju uwierzytelniania należy używać, znajdziesz w artykule Typy wymaganego uwierzytelniania w sekcji „Omówienie uwierzytelniania i autoryzacji w interfejsie Google Chat API”.

Uwierzytelnianie i autoryzacja jako administrator Google Workspace

Z tej sekcji dowiesz się, jak administratorzy workspace’ów Google Workspace mogą zarządzać aplikacjami i pokojami Google Chat w całej organizacji za pomocą uwierzytelniania użytkowników.

Uwierzytelnianie i autoryzacja za pomocą przekazywania dostępu w całej domenie

Jeśli jesteś administratorem domeny, możesz przyznać uprawnienia w całej domenie, aby zezwolić na dostęp do danych użytkowników przez konto usługi aplikacji bez konieczności uzyskiwania zgody każdego użytkownika. Gdy skonfigurujesz przekazywanie dostępu w całej domenie, konto usługi może przyjmować tożsamość konta użytkownika. Mimo że konto usługi jest używane do uwierzytelniania, przekazywanie dostępu w całej domenie pełni rolę użytkownika i dlatego jest uznawane za uwierzytelnianie użytkownika. Z przekazywania dostępu w całej domenie możesz korzystać w przypadku każdej funkcji, która wymaga uwierzytelniania użytkownika.

Uwierzytelnianie i autoryzacja z użyciem uprawnień administratora

Jeśli jesteś administratorem domeny lub administratorem delegowanym z uprawnieniami administratora, możesz uwierzytelniać i autoryzować wywołania interfejsu Google Chat API z uprawnieniami administratora, ustawiając pole useAdminAccess w żądaniach odpowiednich metod. Więcej informacji znajdziesz w dokumentacji API.

Pamiętaj, że gdy aplikacja Google Chat wykonuje działanie przy użyciu uprawnień administratora, nie informuje użytkowników o nazwie aplikacji Chat, która wykonała działanie, ani o nazwie administratora, który ją autoryzował, ale tylko o tym, że działanie zostało wykonane przez administratora organizacji.

Wymagania wstępne

Java

  • Konto Google Workspace w wersji Business lub Enterprise z dostępem do Google Chat.
  • Utwórz projekt Google Cloud.
  • Włącz i skonfiguruj interfejs Google Chat API, podając nazwę, ikonę i opis aplikacji do obsługi czatu.
  • JDK 1.7 lub nowsza wersja
  • Narzędzie do zarządzania pakietami Maven
  • Zainicjowany projekt Maven. Aby zainicjować nowy projekt, uruchom to polecenie w interfejsie wiersza poleceń:
    mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false

Python

Node.js

Google Apps Script

Krok 1. Skonfiguruj ekran zgody OAuth, określ zakresy i zarejestruj aplikację

Gdy do autoryzacji używasz protokołu OAuth 2.0, Google wyświetla użytkownikowi ekran zgody zawierający podsumowanie projektu, stosowanych w nim zasad oraz żądanych zakresów autoryzacji. Konfigurując ekran zgody OAuth aplikacji, określasz, co Google ma wyświetlać użytkownikom i sprawdzającym aplikacje, oraz rejestrujesz aplikację, aby móc ją później opublikować.

Wszystkie aplikacje korzystające z OAuth 2.0 wymagają konfiguracji ekranu zgody, ale zakresy dostępu musisz podać tylko w przypadku aplikacji używanych przez osoby spoza organizacji Google Workspace.

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Ekran zgody OAuth.

    Otwórz ekran zgody OAuth

  2. Wybierz typ użytkownika w aplikacji, a potem kliknij Utwórz.

  3. Wypełnij formularz rejestracji aplikacji, a potem kliknij Zapisz i kontynuuj.

  4. Kliknij Dodaj lub usuń zakresy. Dodaj i potwierdź zakresy autoryzacji wymagane przez Twoją aplikację, kliknij Aktualizuj, a potem Zapisz i kontynuuj.

  5. Przejrzyj podsumowanie rejestracji aplikacji. Aby wprowadzić zmiany, kliknij Edytuj lub Wróć do panelu.

Krok 2. Utwórz w konsoli Google Cloud dane logowania na identyfikator klienta OAuth

Aby uwierzytelnić się jako użytkownik i uzyskać dostęp do danych użytkownika w aplikacji, musisz utworzyć co najmniej 1 identyfikator klienta OAuth 2.0. Identyfikator klienta wskazuje konkretną aplikację na serwerach OAuth Google. Jeśli Twoja aplikacja działa na wielu platformach, np. na Androidzie, iOS i w przeglądarce, musisz utworzyć oddzielny identyfikator klienta dla każdej z nich.

Tworzenie danych logowania do identyfikatora klienta OAuth

Wybierz typ aplikacji, aby uzyskać szczegółowe instrukcje tworzenia identyfikatora klienta OAuth:

Aplikacja internetowa

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Aplikacja internetowa.
  4. W polu Nazwa wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. Dodaj autoryzowane identyfikatory URI powiązane z Twoją aplikacją:
    • Aplikacje po stronie klienta (JavaScript) – w sekcji Autoryzowane źródła JavaScriptu kliknij Dodaj identyfikator URI. Następnie wpisz identyfikator URI, który ma być używany do żądań przeglądarki. Określa domeny, z których aplikacja może wysyłać żądania interfejsu API do serwera OAuth 2.0.
    • Aplikacje po stronie serwera (Java, Python i inne) – w sekcji Autoryzowane identyfikatory URI przekierowania kliknij Dodaj URI. Następnie wpisz identyfikator URI punktu końcowego, do którego serwer OAuth 2.0 może wysyłać odpowiedzi.
  6. Kliknij Utwórz. Pojawi się ekran tworzenia klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.

    Zapisz identyfikator klienta. Klucze klienta nie są używane w przypadku aplikacji internetowych.

  7. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji Identyfikatory klienta OAuth 2.0.

Android

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Android.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. W polu „Nazwa pakietu” wpisz nazwę pakietu z pliku AndroidManifest.xml.
  6. W polu „SHA-1 certificate fingerprint” (Odcisk cyfrowy certyfikatu SHA-1) wpisz wygenerowany odcisk cyfrowy certyfikatu SHA-1.
  7. Kliknij Utwórz. Pojawi się ekran utworzonego klienta OAuth z nowym identyfikatorem klienta.
  8. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klienta OAuth 2.0”.

iOS

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > iOS.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. W polu „Identyfikator pakietu” wpisz identyfikator pakietu podany w pliku Info.plist aplikacji.
  6. Opcjonalnie: jeśli Twoja aplikacja jest dostępna w Apple App Store, wpisz identyfikator z App Store.
  7. Opcjonalnie: w polu „Team ID” (Identyfikator zespołu) wpisz niepowtarzalny ciąg 10 znaków wygenerowany przez Apple i przypisany Twojemu zespołowi.
  8. Kliknij Utwórz. Pojawi się ekran utworzonego klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.
  9. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klienta OAuth 2.0”.

Aplikacja Chrome

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Aplikacja Chrome.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. W polu „Application ID” (Identyfikator aplikacji) wpisz unikalny ciąg znaków identyfikatora aplikacji (32 znaki). Wartość tego identyfikatora znajdziesz w adresie URL aplikacji w Chrome Web Store oraz w panelu dewelopera Chrome Web Store.
  6. Kliknij Utwórz. Pojawi się ekran utworzonego klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.
  7. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klienta OAuth 2.0”.

Aplikacja komputerowa

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Aplikacja na komputer.
  4. W polu Nazwa wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. Kliknij Utwórz. Pojawi się ekran utworzonego klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.
  6. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji Identyfikatory klienta OAuth 2.0.

Telewizory i urządzenia z ograniczoną możliwością wpisywania

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Telewizory i urządzenia z ograniczonym wejściem.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. Kliknij Utwórz. Pojawi się ekran utworzonego klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.
  6. Kliknij OK. Nowo utworzone dane uwierzytelniające pojawią się w sekcji „Identyfikatory klienta OAuth 2.0”.

Universal Windows Platform (UWP)

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. Kliknij Utwórz dane logowania > Identyfikator klienta OAuth.
  3. Kliknij Typ aplikacji > Universal Windows Platform (UWP).
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest wyświetlana tylko w konsoli Google Cloud.
  5. W polu „Identyfikator sklepu” wpisz unikalny 12-znakowy identyfikator sklepu Microsoft Store Twojej aplikacji. Ten identyfikator znajdziesz w adresie URL aplikacji w Microsoft Store oraz w Partner Center.
  6. Kliknij Utwórz. Pojawi się ekran tworzenia klienta OAuth z nowym identyfikatorem klienta i tajnym kluczem klienta.
  7. Kliknij OK. Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klienta OAuth 2.0”.

Pobieranie pliku JSON z obiektem tajnym klienta

Plik tajnego klucza klienta to reprezentacja w formacie JSON danych logowania do identyfikatora klienta OAuth, na które może się ona powoływać podczas udostępniania danych logowania.

  1. W konsoli Google Cloud kliknij Menu  > Interfejsy API i usługi > Dane logowania.

    Przejdź do danych logowania

  2. W sekcji Identyfikatory klienta OAuth 2.0 kliknij utworzony identyfikator klienta.

  3. Kliknij Pobierz plik JSON.

  4. Zapisz plik jako client_secrets.json.

Krok 3. Zainstaluj bibliotekę klienta Google i inne zależności

Zainstaluj bibliotekę klienta Google i inne zależności wymagane przez projekt.

Java

Aby dodać do projektu Maven biblioteki klienta Google i inne wymagane zależności, otwórz plik pom.xml w katalogu projektu i dodaj te zależności:

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

Python

Jeśli nie masz jeszcze zainstalowanych bibliotek klienta Google dla Pythona, uruchom w interfejsie wiersza poleceń to polecenie:

pip3 install --upgrade google-api-python-client google-auth-oauthlib

Node.js

Aby dodać do projektu Node.js biblioteki klienta Google i inne wymagane zależności, przejdź do katalogu projektu i uruchom to polecenie w interfejsie wiersza poleceń:

npm install "@googleapis/chat" open server-destroy

Google Apps Script

Ten przykład używa usługi Google Chat zaawansowanej do wywołania interfejsu Google Chat API. Aby włączyć usługę w projekcie Apps Script:

  1. Po lewej stronie kliknij Edytor .
  2. Po lewej stronie obok opcji Usługi kliknij Dodaj usługę.
  3. Wybierz Google Chat API.
  4. W polu Wersja wybierz v1.
  5. Kliknij Dodaj.

Możesz użyć dowolnego języka obsługiwanego przez nasze biblioteki klienta.

Krok 4. Napisz skrypt, który wywołuje interfejs Chat API

Wywoływanie interfejsu API z autoryzacją OAuth to proces wieloetapowy. W przypadku aplikacji internetowych lub aplikacji na komputery proces wygląda zwykle tak:

  1. Aplikacja kieruje użytkownika na stronę autoryzacji, na której prosi o dostęp do danych użytkownika określonych przez zakresy autoryzacji. Aplikacja identyfikuje się za pomocą danych logowania klienta.
  2. Użytkownik sprawdza uprawnienia wymagane przez aplikację i zatwierdza prośbę.
  3. Serwer uwierzytelniania Google przekierowuje przeglądarkę do punktu końcowego HTTP aplikacji wraz z kodem autoryzacji.
  4. Aplikacja wysyła kolejne żądanie do serwera autoryzacji Google, aby wymienić kod autoryzacji na token dostępu.
  5. Aplikacja używa tokena dostępu do wywoływania interfejsu API w imieniu użytkownika.

Więcej informacji o procesie autoryzacji OAuth znajdziesz w artykule Korzystanie z protokołu OAuth 2.0 w celu uzyskania dostępu do przewodnika po interfejsach API Google.

Te przykłady kodu w językach Java, Python i Node.js korzystają z biblioteki klienta do wykonywania procesu autoryzacji OAuth. Otwarcie lokalnego serwera HTTP umożliwia otrzymanie kodu autoryzacji od serwera autoryzacji, który następnie zamienia go na token dostępu. W przykładowym kodzie Apps Script ten proces autoryzacji jest obsługiwany przez Apps Script.

Po zakończeniu procesu uwierzytelniania skrypt uwierzytelnia się w interfejsie Chat API za pomocą tokena dostępu użytkownika, a następnie tworzy pokój.

Java

  1. Otwórz plik src/main/java/com/google/chat/app/authsample/App.java w katalogu projektu.
  2. Zastąp zawartość pola App.java tym kodem:

    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();
        }
    }
    
  3. Utwórz nowy podkatalog o nazwie resources w katalogu projektu.

  4. Skopiuj plik client_secrets.json do podkatalogu resources.

  5. Aby skonfigurować Mavena tak, aby uwzględniał plik z danymi logowania klienta w pakiecie projektu, otwórz do edycji plik pom.xml w katalogu projektu i dodaj do sekcji <build> następującą konfigurację:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  6. Aby skonfigurować Mavena tak, aby uwzględniał zależności w pakiecie projektu, oraz aby wykonać główną klasę aplikacji, otwórz plik pom.xml w katalogu projektu i dodaj do sekcji <plugins> następującą konfigurację:

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

Python

  1. Zapisz ten kod w pliku o nazwie chat_space_create_named.py w tym samym katalogu, w którym znajduje się plik 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

  1. Zapisz ten kod w pliku o nazwie chat_space_create_named.js w tym samym katalogu, w którym znajduje się projekt Node.js i plik 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);
    

Google Apps Script

  1. W edytorze Apps Script otwórz plik appsscript.json i dodaj zakres OAuth wymagany do wywołania interfejsu API:

      "oauthScopes": [
        "https://www.googleapis.com/auth/chat.spaces.create"
      ]
    
  2. Zapisz ten kod w pliku o nazwie ChatSpaceCreateNamed.gs w projekcie 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);
      }
    }
    

Krok 5. Uruchom przykładowy skrypt

Aby uruchomić przykład, otwórz na linii komend katalog z plikami projektu, a potem uruchom to polecenie:

Java

mvn compile assembly:single
java -jar target/auth-sample-app-1.0-SNAPSHOT-jar-with-dependencies.jar

Python

python3 chat_space_create_named.py

Node.js

node chat_space_create_named.js

Google Apps Script

Otwórz plik ChatSpaceCreateNamed.gs w edytorze Apps Script i kliknij Uruchom.

Otworzy się przeglądarka i wyświetli się prośba o zalogowanie się na konto Google:

Zaloguj się, aby autoryzować aplikację Google Chat.

Rysunek 2. Ekran zgody OAuth, na którym wybierasz konto do uwierzytelniania aplikacji.

Po zalogowaniu się pojawi się ekran zgody OAuth z prośbą o przyznanie uprawnień aplikacji.

Gdy przyznasz uprawnienia, skrypt wywoła interfejs API Google Chat, który odpowie, tworząc pokój Google Chat o nazwie wyświetlanej API-made. Konsola wyświetli szczegóły wywołania interfejsu API. Aby znaleźć pokój, otwórz panel Pokoje w Google Chat.

Rozwiązywanie problemów z przykładem

Podczas uruchamiania chat_space_create_named.py może pojawić się komunikat o błędzie:

Expected a JSON object with a single property for a "web" or "installed" application

Ten komunikat o błędzie oznacza, że pobrany z konsoli Google Cloud plik client_secrets.json nie zaczyna się od właściwości "web" lub "installed". Jeśli po uwierzytelnieniu w pobranym pliku token dostępu nie zapisze go w nowym pliku, takim jak token.json, token dostępu zostanie zapisany w client_secrets.json, co może powodować ten błąd przy kolejnych próbach autoryzacji.

Aby rozwiązać ten problem, ponownie pobierz plik z danymi logowania klienta z konsoli Google Cloud i zapisz nowy plik w miejscu bieżącego pliku.

  • Jeśli aplikacja musi nadal używać tokenów użytkownika poza zakresem pojedynczego przepływu danych, może je przechowywać, aby użyć ponownie w późniejszym czasie. W takim przypadku aplikacja musi bezpiecznie obsługiwać tokeny użytkownika oraz unieważniać i wydawać tokeny odświeżania. Więcej informacji znajdziesz w przewodniku po sprawdzonych metodach korzystania z OAuth 2.0.

  • Aby dowiedzieć się, do czego jeszcze można używać interfejsu Chat API, zapoznaj się z dokumentacją referencyjną interfejsu Chat API.