Uwierzytelnianie jako aplikacja Google Chat

Z tego przewodnika dowiesz się, jak skonfigurować i używać konta usługi, aby uzyskiwać dostęp do interfejsu Google Chat API w imieniu aplikacji Google Chat. Najpierw pokażemy, jak utworzyć konto usługi. Następnie pokażemy, jak napisać skrypt, który używa konta usługi do uwierzytelniania w interfejsie Chat API i publikowania wiadomości w pokoju czatu.

Aby aplikacje Google Chat mogły uzyskiwać dane o pokoju czatu lub wykonywać w nim działania, gdy są uwierzytelnione przy użyciu konta usługi, muszą być jego członkami. Na przykład, aby wyświetlić listę członków pokoju lub utworzyć w nim wiadomość, aplikacja Google Chat musi być członkiem tego pokoju. Jedynym wyjątkiem jest sytuacja, gdy aplikacja Google Chat tworzy pokój z uwierzytelnianiem aplikacji. W takim przypadku aplikacja tworzy pokój, a następnie automatycznie staje się jego członkiem.

Metody interfejsu Google Chat API, które obsługują autoryzację aplikacji z zakresami autoryzacji o nazwach zaczynających się od https://www.googleapis.com/auth/chat.app.* wymagają jednorazowego zatwierdzenia przez administratora. Metody interfejsu Google Chat API, które obsługują autoryzację aplikacji z zakresem autoryzacji https://www.googleapis.com/auth/chat.bot, nie wymagają dodatkowego zatwierdzenia.

Jeśli aplikacja Google Chat musi uzyskiwać dostęp do danych użytkownika lub wykonywać działania w jego imieniu, uwierzytelnij się jako użytkownik zamiast tego. Jeśli jesteś administratorem domeny, możesz przyznać przekazywanie uprawnień w całej domenie, aby autoryzować konto usługi aplikacji Google Chat do uzyskiwania dostępu do danych użytkowników bez konieczności uzyskiwania ich zgody. Więcej informacji znajdziesz w artykule Uwierzytelnianie i autoryzacja za pomocą przekazywania uprawnień w całej domenie.

Więcej informacji o tym, kiedy aplikacje Google Chat wymagają uwierzytelnienia i jakiego rodzaju uwierzytelnienia należy użyć, znajdziesz w artykule Typy wymaganych uwierzytelnień w omówieniu uwierzytelniania i autoryzacji w interfejsie Chat API.

Wymagania wstępne

Java

Python

Node.js

Apps Script

Krok 1. Utwórz konto usługi w konsoli Google Cloud

Utwórz konto usługi, którego aplikacja Google Chat może używać do uzyskiwania dostępu do interfejsów API Google.

Tworzenie konta usługi

Aby utworzyć konto usługi:

Konsola Google Cloud

  1. W konsoli Google Cloud kliknij Menu > Uprawnienia i administracja > Konta usługi.

    Otwórz stronę Konta usługi

  2. Kliknij Utwórz konto usługi.
  3. Wypełnij dane konta usługi, a potem kliknij Utwórz i kontynuuj.
  4. Opcjonalnie: przypisz role do konta usługi, aby przyznać mu dostęp do zasobów projektu Google Cloud. Więcej informacji znajdziesz w artykule Przyznawanie, zmienianie i odbieranie uprawnień do zasobów.
  5. Kliknij Dalej.
  6. Opcjonalnie: wpisz użytkowników lub grupy, którzy mogą zarządzać tym kontem usługi i wykonywać na nim działania. Więcej informacji znajdziesz w artykule Zarządzanie przyjmowaniem tożsamości konta usługi.
  7. Kliknij Gotowe. Zanotuj adres e-mail konta usługi.

gcloud CLI

  1. Utwórz konto usługi:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Opcjonalnie: przypisz role do konta usługi, aby przyznać mu dostęp do zasobów projektu Google Cloud. Więcej informacji znajdziesz w artykule Przyznawanie, zmienianie i odbieranie uprawnień do zasobów.

Konto usługi pojawi się na stronie kont usługi. Następnie utwórz klucz prywatny dla konta usługi.

Tworzenie klucza prywatnego

Aby utworzyć i pobrać klucz prywatny dla konta usługi:

  1. W konsoli Google Cloud kliknij Menu > Uprawnienia i administracja > Konta usługi.

    Otwórz stronę Konta usługi

  2. Wybierz konto usługi.
  3. Kliknij Klucze > Dodaj klucz > Utwórz nowy klucz.
  4. Wybierz JSON, a potem kliknij Utwórz.

    Nowa para kluczy publicznych/prywatnych zostanie wygenerowana i pobrana na Twoje urządzenie jako nowy plik. Zapisz pobrany plik JSON jako credentials.json w swoim katalogu roboczym. Ten plik jest jedyną kopią tego klucza. Informacje o tym, jak bezpiecznie przechowywać klucz, znajdziesz w artykule Zarządzanie kluczami konta usługi.

  5. Kliknij Zamknij.

Więcej informacji o kontach usługi znajdziesz w dokumentacji Google Cloud IAM.

Następnie utwórz zgodnego z Google Workspace Marketplace klienta OAuth dla tego konta usługi.

Uzyskiwanie zatwierdzenia przez administratora

Aby używać zakresu autoryzacji https://www.googleapis.com/auth/chat.bot, nie jest wymagane zatwierdzenie przez administratora. Przejdź do kroku 2. Zainstaluj bibliotekę klienta Google i inne zależności. W przykładzie w tym przewodniku używamy zakresu autoryzacji https://www.googleapis.com/auth/chat.bot, więc jeśli postępujesz zgodnie z przykładem, przejdź do kroku 2.

Aby używać zakresu autoryzacji, który zaczyna się od https://www.googleapis.com/auth/chat.app.*, Twoja aplikacja Google Chat musi uzyskać jednorazowe zatwierdzenie przez administratora.

Aby uzyskać zatwierdzenie przez administratora, musisz przygotować konto usługi aplikacji Google Chat, podając te informacje:

  • Klient OAuth zgodny z Google Workspace Marketplace.
  • Konfiguracja aplikacji w pakiecie SDK Google Workspace Marketplace.

Tworzenie klienta OAuth zgodnego z Google Workspace Marketplace

Aby utworzyć klienta OAuth zgodnego z Google Workspace Marketplace:

  1. W konsoli Google Cloud kliknij Menu > Uprawnienia i administracja > Konta usługi.

    Otwórz stronę Konta usługi

  2. Kliknij konto usługi utworzone dla aplikacji Google Chat.

  3. Kliknij Ustawienia zaawansowane.

  4. Kliknij Utwórz klienta OAuth zgodnego z Google Workspace Marketplace.

  5. Kliknij Dalej.

Pojawi się komunikat potwierdzający, że utworzono klienta OAuth zgodnego z Google Workspace Marketplace.

Konfigurowanie aplikacji Google Chat w pakiecie SDK Google Workspace Marketplace

Aby skonfigurować aplikację Google Chat w pakiecie SDK Google Workspace Marketplace:

  1. W konsoli Google Cloud włącz pakiet SDK Google Workspace Marketplace.

    Włączanie pakietu SDK Google Workspace Marketplace

  2. W konsoli Google Cloud kliknij Menu > Interfejsy API i usługi > Włączone interfejsy API i usługi > Pakiet SDK Google Workspace Marketplace > Konfiguracja aplikacji.

    Otwórz stronę Konfiguracja aplikacji

  3. Wypełnij stronę Konfiguracja aplikacji. Sposób skonfigurowania aplikacji Google Chat zależy od grupy docelowej i innych czynników. Aby uzyskać pomoc w wypełnianiu strony konfiguracji aplikacji, zapoznaj się z artykułem Konfigurowanie aplikacji w pakiecie SDK Google Workspace Marketplace. Na potrzeby tego przewodnika wpisz te informacje:

    1. W sekcji Widoczność aplikacji wybierz Prywatna.
    2. W sekcji Ustawienia instalacji wybierz Indywidualna + instalacja przez administratora.
    3. W sekcji Integracje aplikacji wybierz Aplikacja Google Chat.
    4. W sekcji Zakresy OAuth wpisz wszystkie zakresy uwierzytelniania używane przez aplikację Google Chat.

    5. W sekcji Informacje o deweloperze wpisz Nazwę dewelopera, Adres URL witryny dewelopera i Adres e-mail dewelopera.

    6. Kliknij Zapisz kopię roboczą.

Uzyskiwanie zatwierdzenia przez administratora

Teraz, gdy konto usługi jest skonfigurowane do otrzymywania zatwierdzenia przez administratora, uzyskaj je od administratora Google Workspace, który może przyznać zatwierdzenie, wykonując czynności opisane w artykule Konfigurowanie autoryzacji aplikacji Google Chat.

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

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

Java

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

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

Node.js

Aby dodać biblioteki klienta Google do projektu Node.js, przejdź do katalogu projektu i w interfejsie wiersza poleceń uruchom to polecenie:

npm install "@googleapis/chat"

Apps Script

Ten przykład używa biblioteki OAuth2 for Apps Script do generowania tokena JWT na potrzeby uwierzytelniania konta usługi. Aby dodać bibliotekę do projektu Apps Script:

  1. Po lewej stronie kliknij Edytor .
  2. Po lewej stronie obok Biblioteki kliknij Dodaj bibliotekę .
  3. Wpisz identyfikator skryptu 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF.
  4. Kliknij Wyszukaj, a potem Dodaj.

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

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

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

Krok 3. Napisz skrypt, który używa konta usługi do uwierzytelniania w interfejsie Chat API

Ten kod uwierzytelnia się w interfejsie Chat API za pomocą konta usługi, a następnie publikuje wiadomość w pokoju czatu:

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.googleapis.javanet.GoogleNetHttpTransport;
    import com.google.api.client.http.HttpRequestInitializer;
    import com.google.api.client.json.gson.GsonFactory;
    import com.google.api.services.chat.v1.HangoutsChat;
    import com.google.api.services.chat.v1.model.Message;
    import com.google.auth.http.HttpCredentialsAdapter;
    import com.google.auth.oauth2.GoogleCredentials;
    
    /**
     * Authenticates with Chat API using service account credentials,
     * then creates a Chat message.
     */
    public class App {
        // Specify required scopes.
        private static final String CHAT_SCOPE = "https://www.googleapis.com/auth/chat.bot";
    
        // Specify service account details.
        private static final String PRIVATE_KEY_RESOURCE_URI = "/credentials.json";
    
        public static void main( String[] args ) {
            try {
                // Run app.
                Message response = App.createChatMessage();
                // Print details about the created message.
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        private static Message createChatMessage() throws Exception {
            // Build the Chat API client and authenticate with the service account.
            GoogleCredentials credentials = GoogleCredentials.fromStream(
                App.class.getResourceAsStream(PRIVATE_KEY_RESOURCE_URI))
                .createScoped(CHAT_SCOPE);
            HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(credentials);
            HangoutsChat chatService = new HangoutsChat.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                GsonFactory.getDefaultInstance(),
                requestInitializer)
                .setApplicationName("auth-sample-app")
                .build();
    
            // The space to create the message in.
            //
            // Replace SPACE_NAME with a space name.
            // Obtain the space name from the spaces resource of Chat API,
            // or from a space's URL.
            String spaceName = "spaces/SPACE_NAME";
    
            // Create a Chat message.
            Message message = new Message().setText("Hello, world!");
            return chatService.spaces().messages().create(spaceName, message).execute();
        }
    }
    
  3. W kodzie zastąp SPACE_NAME nazwą pokoju , którą możesz uzyskać za pomocą metodyspaces.list w interfejsie Chat API lub z adresu URL pokoju.

  4. W katalogu projektu utwórz nowy podkatalog o nazwie resources.

  5. Upewnij się, że plik klucza prywatnego konta usługi ma nazwę credentials.json, i skopiuj go do podkatalogu resources.

  6. Aby skonfigurować narzędzie Maven tak, aby uwzględniało plik klucza prywatnego w pakiecie projektu, edytuj plik pom.xml w katalogu projektu i dodaj tę konfigurację do sekcji <build>:

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

    <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. W katalogu roboczym utwórz plik o nazwie chat_app_auth.py.
  2. W pliku chat_app_auth.py umieść ten kod:

    from apiclient.discovery import build
    from google.oauth2 import service_account
    
    # Specify required scopes.
    SCOPES = ['https://www.googleapis.com/auth/chat.bot']
    
    # Specify service account details.
    creds = service_account.Credentials.from_service_account_file(
        'credentials.json', scopes=SCOPES)
    
    # Build the URI and authenticate with the service account.
    chat = build('chat', 'v1', credentials=creds)
    
    # Create a Chat message.
    result = chat.spaces().messages().create(
    
        # The space to create the message in.
        #
        # Replace SPACE_NAME with a space name.
        # Obtain the space name from the spaces resource of Chat API,
        # or from a space's URL.
        parent='spaces/SPACE_NAME',
    
        # The message to create.
        body={'text': 'Hello, world!'}
    
    ).execute()
    
    # Prints details about the created message.
    print(result)
    
  3. W kodzie zastąp SPACE_NAME nazwą pokoju , którą możesz uzyskać za pomocą metodyspaces.list w interfejsie Chat API lub z adresu URL pokoju. Upewnij się, że plik klucza prywatnego konta usługi ma nazwę credentials.json.

Node.js

  1. W katalogu projektu utwórz plik o nazwie chat_app_auth.js.
  2. W pliku chat_app_auth.js umieść ten kod:

    const chat = require('@googleapis/chat');
    
    async function createMessage() {
      const auth = new chat.auth.GoogleAuth({
    
        // Specify service account details.
        keyFilename: 'credentials.json',
    
        // Specify required scopes.
        scopes: ['https://www.googleapis.com/auth/chat.bot']
    
      });
      const authClient = await auth.getClient();
    
      // Create the Chat API client and authenticate with the service account.
      const chatClient = await chat.chat({
        version: 'v1',
        auth: authClient
      });
    
      // Create a Chat message.
      const result = await chatClient.spaces.messages.create({
    
        // The space to create the message in.
        //
        // Replace SPACE_NAME with a space name.
        // Obtain the space name from the spaces resource of Chat API,
        // or from a space's URL.
        parent: 'spaces/SPACE_NAME',
    
        // The message to create.
        requestBody: { 'text': 'Hello, world!' }
    
      });
      return result;
    }
    
    // Execute function then print details about the created message.
    createMessage().then(console.log);
    
  3. W kodzie zastąp SPACE_NAME nazwą pokoju , którą możesz uzyskać za pomocą metodyspaces.list w interfejsie Chat API lub z adresu URL pokoju. Upewnij się, że plik klucza prywatnego konta usługi ma nazwę credentials.json.

Apps Script

  1. W edytorze skryptów Apps Script edytuj plik appsscript.json i dodaj zakres protokołu OAuth niezbędny do wysyłania żądań zewnętrznych w celu uzyskania tokena protokołu OAuth konta usługi:

      "oauthScopes": [
        "https://www.googleapis.com/auth/script.external_request"
      ]
    
  2. Zapisz ten kod w pliku o nazwie ChatAppAuth.gs w projekcie Apps Script:

    // Specify the contents of the file credentials.json.
    const CREDENTIALS = CREDENTIALS;
    
    const SCOPE = 'https://www.googleapis.com/auth/chat.bot';
    
    // The space to create the message in.
    //
    // Replace SPACE_NAME with a space name.
    // Obtain the space name from the spaces resource of Chat API,
    // or from a space's URL.
    const PARENT = 'spaces/SPACE_NAME'
    
    /**
     * Authenticates with Chat API using app credentials, then posts a message.
     */
    function createMessageWithAppCredentials() {
      try {
        const service = getService_();
        if (!service.hasAccess()) {
          console.error(service.getLastError());
          return;
        }
    
        // Specify the message to create.
        const message = {'text': 'Hello world!'};
    
        // Call Chat API with a service account to create a message.
        const result = Chat.Spaces.Messages.create(
            message,
            PARENT,
            {},
            // Authenticate with the service account token.
            {'Authorization': 'Bearer ' + service.getAccessToken()});
    
        // Log details about the created message.
        console.log(result);
    
      } catch (err) {
        // TODO (developer) - Handle exception.
        console.log('Failed to create message with error %s', err.message);
      }
    }
    
    /**
     * Configures the OAuth library to authenticate with the service account.
     */
    function getService_() {
      return OAuth2.createService(CREDENTIALS.client_email)
          .setTokenUrl('https://oauth2.googleapis.com/token')
          .setPrivateKey(CREDENTIALS.private_key)
          .setIssuer(CREDENTIALS.client_email)
          .setSubject(CREDENTIALS.client_email)
          .setScope(SCOPE)
          .setPropertyStore(PropertiesService.getScriptProperties());
    }
    
  3. W kodzie zastąp CREDENTIALS zawartością pliku credentials.json.

  4. W kodzie zastąp SPACE_NAME nazwą pokoju , którą możesz uzyskać za pomocą metodyspaces.list w interfejsie Chat API lub z adresu URL pokoju.

Krok 4. Uruchom cały przykład

W katalogu roboczym skompiluj i uruchom przykład:

Java

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

Python

python3 chat_app_auth.py

Node.js

node chat_app_auth.js

Apps Script

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

Skrypt wysyła uwierzytelnione żądanie do interfejsu Chat API, który odpowiada, publikując wiadomość w pokoju czatu jako aplikacja Google Chat.

Rozwiązywanie problemów z przykładem

W tej sekcji opisujemy typowe problemy, które mogą wystąpić podczas próby uruchomienia tego przykładu.

Nie masz uprawnień do korzystania z tej aplikacji

Podczas uruchamiania skryptu może pojawić się błąd:

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}/messages?alt=json returned "You are not permitted to use this app". Details: "You are not permitted to use this app">

Ten komunikat o błędzie oznacza, że aplikacja Google Chat nie ma uprawnień do tworzenia wiadomości w określonym pokoju czatu.

Aby rozwiązać ten problem, dodaj aplikację Google Chat do pokoju czatu określonego w skrypcie.

Administrator musi przyznać aplikacji wymagany zakres autoryzacji OAuth na potrzeby tej czynności

Podczas uruchamiania skryptu może pojawić się błąd:

<HttpError 403 when requesting https://chat.googleapis.com/v1/spaces/{space}?alt=json returned "The administrator must grant the app the required OAuth authorization scope for this action.". Details: "The administrator must grant the app the required OAuth authorization scope for this action.">

Ten komunikat o błędzie oznacza, że administrator Google Workspace nie przyznał jeszcze jednorazowego zatwierdzenia aplikacji Google Chat do używania zakresów autoryzacji, które zaczynają się od nazwy https://www.googleapis.com/auth/chat.app.*.

Aby rozwiązać ten problem:

  • Poproś administratora Google Workspace o przyznanie zatwierdzenia aplikacji Google Chat. Podczas obsługi tego błędu w logice aplikacji Google Chat rozważ wysłanie wiadomości informującej, że aplikacja Google Chat potrzebuje zatwierdzenia przez administratora, aby wykonać żądane działanie, np.: To perform this action, I need approval. <https://support.google.com/a?p=chat-app-auth|Learn more>.
  • Jeśli metoda interfejsu Google Chat API obsługuje zakres autoryzacji https://www.googleapis.com/auth/chat.bot, który nie wymaga zatwierdzenia przez administratora, rozważ użycie go. Aby sprawdzić, które zakresy autoryzacji obsługuje dana metoda, zapoznaj się z dokumentacją interfejsu Google Chat API.