Uwierzytelnianie i autoryzacja jako użytkownik Google Chat

Ten przewodnik wyjaśnia, jak używać protokołu OAuth 2.0 z danymi logowania Google użytkowników, aby uzyskać dostęp do interfejsu Chat API. Uwierzytelnianie i autoryzacja za pomocą danych logowania użytkownika umożliwiają aplikacjom do obsługi czatu dostęp do danych użytkownika i wykonywanie operacji w imieniu uwierzytelnionego użytkownika. Po uwierzytelnieniu w imieniu użytkownika aplikacja ma takie same uprawnienia jak on i może wykonywać działania tak, jakby to robił użytkownik.

Po uwierzytelnieniu i autoryzacji wywołania interfejsu API za pomocą danych logowania użytkownika aplikacje do obsługi czatu mogą wykonywać te czynności:

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

Gdy aplikacja wykonuje działanie z uwierzytelnianiem użytkownika (np. tworzy pokój), Google Chat wyświetla komunikat o atrybucji, który informuje użytkowników o nazwie aplikacji, która wykonała działanie dla użytkownika, który ją autoryzował.

Aplikacja Google Chat tworzy pokój dla użytkownika.
Rysunek 1. Wiadomość z atrybucją, którą 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żyć, znajdziesz w artykule Rodzaje wymaganego uwierzytelniania w przeglądzie uwierzytelniania i autoryzacji w interfejsie Chat API.

Uwierzytelnianie i autoryzacja jako administrator Google Workspace

W tej sekcji dowiesz się, jak administratorzy 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ć przekazywanie uprawnień w obrębie całej domeny, aby autoryzować konto usługi aplikacji do uzyskiwania dostępu do danych użytkowników bez konieczności uzyskiwania zgody każdego z nich. Po skonfigurowaniu przekazywania dostępu w całej domenie konto usługi może podszywać się pod konto użytkownika. Chociaż konto usługi jest używane do uwierzytelniania, przekazywanie dostępu w całej domenie przyjmuje tożsamość użytkownika, dlatego jest uważane za uwierzytelnianie użytkownika. W przypadku każdej funkcji, która wymaga uwierzytelniania użytkownika, możesz użyć przekazywania dostępu w całej domenie.

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 interfejsu API.

Pamiętaj, że gdy aplikacja Google Chat wykonuje działanie z uprawnieniami administratora, Chat nie podaje użytkownikom nazwy aplikacji Chat, która wykonała działanie, ani nazwy administratora, który je autoryzował. Informuje tylko, ż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 w wersji 1.7 lub nowszej
  • 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 stosujesz autoryzację z użyciem OAuth 2.0, Google wyświetla użytkownikowi ekran zgody zawierający podsumowanie projektu, stosowanych w nim zasad oraz żądanych zakresów autoryzacji. Skonfigurowanie ekranu zgody OAuth aplikacji określa, co Google wyświetla użytkownikom i osobom sprawdzającym aplikację, oraz rejestruje aplikację, aby można ją było później opublikować.

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

  1. W konsoli Google Cloud otwórz Menu  > > Branding.

    Otwórz Promowanie marki

  2. Jeśli masz już skonfigurowany ekran akceptacji OAuth, możesz skonfigurować te ustawienia w sekcjach Branding, Odbiorcy i Dostęp do danych. Jeśli zobaczysz komunikat Jeszcze nie skonfigurowano, kliknij Rozpocznij:

    1. W sekcji Informacje o aplikacji w polu Nazwa aplikacji wpisz nazwę aplikacji.
    2. W sekcji Adres e-mail pomocy dla użytkowników wybierz adres e-mail, na który użytkownicy mogą pisać, jeśli mają pytania dotyczące ich zgody.
    3. Kliknij Dalej.
    4. W sekcji Odbiorcy wybierz Wewnętrzny. Jeśli nie możesz wybrać opcji Wewnętrzny, wybierz Zewnętrzny.
    5. Kliknij Dalej.
    6. W sekcji Dane kontaktowe wpisz adres e-mail, na który będziemy wysyłać powiadomienia o wszelkich zmianach w Twoim projekcie.
    7. Kliknij Dalej.
    8. W sekcji Zakończ zapoznaj się z zasadami dotyczącymi danych użytkownika w usługach interfejsów API Google i jeśli je akceptujesz, kliknij Akceptuję zasady dotyczące danych użytkownika w usługach interfejsów API Google.
    9. Kliknij Dalej.
    10. Kliknij Utwórz.
    11. Jeśli jako typ użytkownika wybierzesz Zewnętrzny, dodaj użytkowników testowych:
      1. Kliknij Odbiorcy.
      2. W sekcji Użytkownicy testowi kliknij Dodaj użytkowników.
      3. Wpisz swój adres e-mail i adresy e-mail innych autoryzowanych testerów, a potem kliknij Zapisz.
  3. Kliknij Dostęp do danych > Dodaj lub usuń zakresy. Pojawi się panel z listą zakresów każdego interfejsu API włączonego w projekcie Google Cloud.

    1. W sekcji Ręcznie dodaj zakresy wklej https://www.googleapis.com/auth/chat.spaces.create, który jest wymagany do uruchomienia przykładu uwierzytelniania w tym przewodniku. Listę dostępnych zakresów interfejsu Chat API znajdziesz w artykule Zakresy interfejsów API Google Chat w omówieniu uwierzytelniania.
    2. Kliknij Dodaj do tabeli.
    3. Kliknij Aktualizuj.
    4. Po wybraniu zakresów wymaganych przez aplikację na stronie Dostęp do danych kliknij Zapisz.

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

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 kilku platformach, np. Androidzie, iOS i w internecie, musisz utworzyć osobny identyfikator klienta dla każdej z nich.

Tworzenie danych logowania identyfikatora klienta OAuth

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

Aplikacja internetowa

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Aplikacja internetowa.
  4. W polu Nazwa wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. Dodaj autoryzowane identyfikatory URI związane z Twoją aplikacją:
    • Aplikacje po stronie klienta (JavaScript) – w sekcji Autoryzowane źródła JavaScriptu kliknij Dodaj URI. Następnie wpisz identyfikator URI, który ma być używany w żądaniach przeglądarki. Określa domeny, z których aplikacja może wysyłać żądania 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.

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

    Zapisz identyfikator klienta. W przypadku aplikacji internetowych nie używa się kluczy klienta.

Android

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Android.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. W polu „Nazwa pakietu” wpisz nazwę pakietu z pliku AndroidManifest.xml.
  6. W polu „Odcisk cyfrowy certyfikatu SHA-1” wpisz wygenerowany odcisk cyfrowy certyfikatu SHA-1.
  7. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

iOS

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > iOS.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest widoczna 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 sklepu App Store.
  7. Opcjonalnie: w polu „Identyfikator zespołu” wpisz niepowtarzalny ciąg 10 znaków wygenerowany przez Apple, który został przypisany Twojemu zespołowi.
  8. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

Aplikacja Chrome

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Rozszerzenie Chrome.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. W polu „Identyfikator produktu” wpisz unikalny 32-znakowy ciąg identyfikatora aplikacji. Wartość tego identyfikatora znajdziesz w adresie URL aplikacji w Chrome Web Store oraz w Panelu dewelopera Chrome Web Store.
  6. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

Aplikacja komputerowa

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Aplikacja na komputer.
  4. W polu Nazwa wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

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

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Telewizory i urządzenia z ograniczonymi możliwościami wprowadzania danych.
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

Universal Windows Platform (UWP)

  1. W konsoli Google Cloud otwórz Menu  > > Klienci.

    Otwórz stronę Klienci

  2. Kliknij Utwórz klienta.
  3. Kliknij Typ aplikacji > Uniwersalna platforma Windows (UWP).
  4. W polu „Nazwa” wpisz nazwę danych logowania. Ta nazwa jest widoczna tylko w konsoli Google Cloud.
  5. W polu „Identyfikator sklepu” wpisz unikalny 12-znakowy identyfikator aplikacji w Microsoft Store. Ten identyfikator znajdziesz w adresie URL aplikacji w Microsoft Store i w Centrum partnerów.
  6. Kliknij Utwórz.

    Nowo utworzone dane logowania pojawią się w sekcji „Identyfikatory klientów OAuth 2.0”.

Pobieranie pliku JSON z tajnym kluczem klienta

Plik tajnego klucza klienta to reprezentacja JSON danych logowania identyfikatora klienta OAuth, do których aplikacja Chat może się odwoływać podczas podawania danych logowania.

  1. W konsoli Google Cloud otwórz 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 JSON.

  4. Zapisz plik jako credentials.json.

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

Zainstaluj bibliotekę klienta Google i inne zależności wymagane w projekcie.

Java

Aby dodać biblioteki klienta Google i inne wymagane zależności do projektu Maven, zmień 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ć biblioteki klienta Google i inne wymagane zależności do projektu Node.js, przejdź do katalogu projektu i uruchom w interfejsie wiersza poleceń to polecenie:

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

Google Apps Script

W tym przykładzie do wywoływania interfejsu Google Chat API używana jest zaawansowana usługa Chat. Aby włączyć usługę w projekcie Apps Script:

  1. Po lewej stronie kliknij Edytor .
  2. Po lewej stronie obok pozycji 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 aplikacjach internetowych lub na komputery proces ten zwykle wygląda tak:

  1. Aplikacja przekierowuje 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 identyfikatora klienta.
  2. Użytkownik sprawdza uprawnienia, o które prosi aplikacja, 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 przewodniku po używaniu OAuth 2.0 na potrzeby dostępu do interfejsów API Google.

Poniższe przykłady kodu w językach Java, Python i Node.js korzystają z biblioteki klienta, aby wykonać proces autoryzacji OAuth. Otwiera lokalny serwer HTTP, aby otrzymać kod autoryzacji z serwera autoryzacji, a następnie wymienić 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. W katalogu projektu otwórz plik src/main/java/com/google/chat/app/authsample/App.java.
  2. Zastąp zawartość pliku 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 = "/credentials.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("/credentials.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 credentials.json do podkatalogu resources.

  5. Aby skonfigurować Maven tak, aby uwzględniał plik z tajnymi danymi klienta w pakiecie projektu, otwórz do edycji plik pom.xml w katalogu projektu i dodaj do sekcji <build> tę konfigurację:

    <build>   <!-- ... existing configurations ... -->   <resources>     <resource>       <directory>resources</directory>     </resource>   </resources> </build> 
  6. Aby skonfigurować Maven tak, aby uwzględniał zależności w pakiecie projektu i wykonywał główną klasę aplikacji, edytuj plik pom.xml w katalogu projektu i dodaj tę konfigurację do sekcji <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> 

Python

  1. Zapisz ten kod w pliku o nazwie chat_space_create_named.py w tym samym katalogu, w którym znajduje się plik credentials.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(                     'credentials.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 znajdują się projekt Node.js i plik credentials.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('./credentials.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 zmień plik appsscript.json i dodaj zakres OAuth niezbędny 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, w wierszu poleceń otwórz katalog z plikami projektu, a potem wykonaj 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 z prośbą o zalogowanie się na konto Google:

Logowanie się w celu autoryzacji aplikacji do obsługi czatu.

Rysunek 2. ekran zgody OAuth, na którym wybierasz konto do uwierzytelnienia aplikacji;

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

Po przyznaniu uprawnień skrypt wywołuje interfejs Chat API, który w odpowiedzi tworzy pokój w Google Chat o wyświetlanej nazwie API-made. Konsola wyświetla 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ę błąd:

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 credentials.json nie zaczyna się od właściwości "web" ani "installed". Jeśli po uwierzytelnieniu za pomocą pobranego pliku kod nie zapisuje tokena dostępu w nowym pliku, np. token.json, token dostępu jest zapisywany w pliku credentials.json, co może powodować ten błąd podczas kolejnych prób autoryzacji.

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