S'authentifier en tant qu'application Google Chat

Ce guide explique comment configurer et utiliser un compte de service pour accéder aux API Google Chat pour le compte d'une application Chat. Tout d'abord, il vous explique comment créer un compte de service. Ensuite, il montre comment d'écrire un script qui utilise le compte de service pour s'authentifier auprès de API et publier un message dans un espace Chat.

Les applications de chat peuvent utiliser des comptes de service pour s'authentifier lors d'appels asynchrones l'API Google Chat pour qu'ils puissent:

  • Envoyer des messages à Google Chat avec spaces.messages.create par:
    • Avertir les utilisateurs lorsqu'un job d'arrière-plan de longue durée se termine.
    • Alertez les utilisateurs qu'un serveur est hors connexion.
    • Demandez à un membre du service client de s'occuper d'une nouvelle demande client.
  • Mettre à jour les messages précédemment envoyés avec spaces.messages.update par:
    • Modifier l'état de lors d'une opération en cours
    • Mettez à jour le responsable ou la date d'échéance d'une tâche.
  • Lister les utilisateurs d'un espace avec spaces.members.list par:
    • Découvrez qui se trouve dans un espace.
    • Vérifiez que tous les membres d'une équipe font partie de l'espace.

Lors de l'authentification avec un compte de service, pour obtenir des données ou effectuer des actions dans un espace Chat, les applications Chat doivent être membres de l'espace. Par exemple, pour lister les membres d'un espace, ou pour créer un message dans un espace, l'application Chat doit être membre de l'espace.

Si votre application Chat doit accéder à des données utilisateur ou effectuer des actions sur le compte authentifiez-vous en tant qu'utilisateur à la place.

Si vous êtes administrateur de domaine, vous pouvez accorder délégation d'autorité au niveau du domaine pour autoriser le compte de service d'une application à accéder aux données sans données obligeant chaque utilisateur à donner son consentement. Après avoir configuré la délégation au niveau du domaine, vous pouvez Effectuez des appels d'API avec votre compte de service pour emprunter l'identité d'un compte utilisateur. Bien qu'un compte de service soit utilisé l'authentification, la délégation au niveau du domaine emprunte l'identité d'un utilisateur et est donc comme l'authentification des utilisateurs. Toute fonctionnalité nécessitant vous pouvez utiliser la délégation au niveau du domaine.

Pour savoir quand les applications Chat exigent une authentification et le type d'authentification à utiliser, voir Types d'authentification requise dans la présentation de l'API Chat sur l'authentification et l'autorisation.

Prérequis

Pour exécuter l'exemple de ce guide, vous devez remplir les conditions préalables suivantes:

En outre, vous devez remplir les conditions préalables suivantes propres à chaque langage:

Java

  • JDK 1.7 ou version ultérieure
  • Le Maven outil de gestion des packages
  • Un projet Maven initialisé Pour initialiser un nouveau projet, exécutez la dans votre interface de ligne de commande:

    mvn archetype:generate -DgroupId=com.google.chat.app.authsample -DartifactId=auth-sample-app -DarchetypeArtifactId=maven-archetype-quickstart -DarchetypeVersion=1.4 -DinteractiveMode=false
    

Python

  • Python 3.6 ou version ultérieure
  • La fonction pip outil de gestion des packages

Node.js

  • Node.js
  • La commande npm outil de gestion des packages
  • Un projet Node.js initialisé. Pour initialiser un nouveau projet, créez et accédez à un nouveau dossier, puis exécutez la commande suivante dans votre interface de ligne de commande:

    npm init
    

Apps Script ;

Étape 1: Créez un compte de service dans la console Google Cloud

Créez un compte de service que votre application Chat peut utiliser pour pour accéder aux API Google.

Créer un compte de service

Pour créer un compte de service, procédez comme suit :

console Google Cloud

  1. Dans la console Google Cloud, accédez au menu . > IAM et Administrateur > Comptes de service.

    Accéder à la page "Comptes de service"

  2. Cliquez sur Créer un compte de service.
  3. Renseignez les détails du compte de service, puis cliquez sur Créer et continuer.
  4. Facultatif: attribuez des rôles à votre compte de service pour accorder l'accès aux ressources de votre projet Google Cloud. Pour en savoir plus, consultez Accorder, modifier et révoquer les accès à des ressources.
  5. Cliquez sur Continuer.
  6. Facultatif: indiquez les utilisateurs ou les groupes autorisés à gérer ce compte de service et à y effectuer des actions. Pour en savoir plus, consultez Gérer l'emprunt d'identité d'un compte de service.
  7. Cliquez sur OK. Notez l'adresse e-mail du compte de service.

CLI gcloud

  1. Créez le compte de service:
    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME \
      --display-name="SERVICE_ACCOUNT_NAME"
  2. Facultatif: attribuez des rôles à votre compte de service pour accorder l'accès aux ressources de votre projet Google Cloud. Pour en savoir plus, consultez Accorder, modifier et révoquer les accès à des ressources.

Le compte de service s'affiche sur la page du compte de service. Ensuite, créez un pour le compte de service.

Créer une clé privée

Pour créer et télécharger une clé privée pour le compte de service, procédez comme suit:

  1. Dans la console Google Cloud, accédez au menu . > IAM et Administrateur > Comptes de service.

    Accéder à la page "Comptes de service"

  2. Sélectionnez votre compte de service.
  3. Cliquez sur Clés > Ajouter une clé > Créer une clé.
  4. Sélectionnez JSON, puis cliquez sur Créer.

    Votre nouvelle paire de clés publique/privée est générée et téléchargée sur votre machine comme un nouveau fichier. Enregistrez le fichier JSON téléchargé sous le nom credentials.json dans votre dans le répertoire de travail actuel. Ce fichier est la seule copie de cette clé. Pour savoir comment stocker votre clé en toute sécurité, consultez Gérer des clés de compte de service

  5. Cliquez sur Fermer.

Pour en savoir plus sur les comptes de service, consultez la page comptes de service dans la documentation Google Cloud IAM.

Étape 2: Installez la bibliothèque cliente Google et les autres dépendances

Installez la bibliothèque cliente Google et les autres dépendances requises pour le projet.

Java

Pour ajouter les bibliothèques clientes Google et les autres dépendances requises à votre Maven, modifiez le fichier pom.xml dans le répertoire de votre projet et ajoutez le les dépendances suivantes:

<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

Si vous n'avez pas encore installé les bibliothèques clientes Google pour Python, exécutez la commande suivante : la commande suivante dans votre interface de ligne de commande:

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

Node.js

Pour ajouter les bibliothèques clientes Google à votre projet Node.js, accédez à votre de votre projet et exécutez la commande suivante dans votre interface de ligne de commande:

npm install "@googleapis/chat"

Apps Script ;

Cet exemple utilise OAuth2 pour la bibliothèque Apps Script afin de générer un jeton JWT pour l'authentification du compte de service. Pour ajouter la bibliothèque à votre projet Apps Script:

  1. À gauche, cliquez sur Montage .
  2. À gauche, à côté de Bibliothèques, cliquez sur Ajouter une bibliothèque.
  3. Saisissez l'ID de script 1B7FSrk5Zi6L1rSxxTDgDEUsPzlukDsi4KGuTMorsTQHhGBzBkMun4iDF.
  4. Cliquez sur Rechercher, puis sur Ajouter.

Cet exemple utilise Service Chat avancé pour appeler l'API Google Chat. Pour activer le service sur votre Projet Apps Script:

  1. À gauche, cliquez sur Montage .
  2. Sur la gauche, à côté de Services, cliquez sur Ajouter un service.
  3. Sélectionnez API Google Chat.
  4. Dans Version, sélectionnez v1.
  5. Cliquez sur Ajouter.

Vous pouvez utiliser n'importe quelle langue prise en charge par notre bibliothèques clientes.

Étape 3: Rédigez un script qui utilise le compte de service pour s'authentifier auprès de l'API Chat

Le code suivant permet de s'authentifier auprès de API Chat à l'aide d'un compte de service, puis publie un message dans un espace Chat:

Java

  1. Dans le répertoire de votre projet, ouvrez le fichier src/main/java/com/google/chat/app/authsample/App.java
  2. Remplacez le contenu du fichier App.java par le code suivant:

    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 via 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. Dans le code, remplacez SPACE_NAME par un espace. que vous pouvez obtenir à partir de la méthode spaces.list dans l'API Chat ou à partir de l'URL d'un espace.

  4. Créez un sous-répertoire nommé resources dans le répertoire de votre projet.

  5. Assurez-vous que le fichier de clé privée de votre compte de service porte le nom credentials.json et copiez-le dans le sous-répertoire resources.

  6. Pour configurer Maven afin d'inclure le fichier de clé privée dans le package du projet, procédez comme suit : Modifiez le fichier pom.xml dans le répertoire de votre projet et ajoutez ce qui suit : configuration à la section <build>:

    <build>
      <!-- ... existing configurations ... -->
      <resources>
        <resource>
          <directory>resources</directory>
        </resource>
      </resources>
    </build>
    
  7. Configurer Maven de manière à inclure les dépendances dans le package de projet pour exécuter la classe principale de votre application, modifiez le fichier pom.xml dans votre dans le répertoire du projet et ajoutez la configuration suivante au Section <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. Dans votre répertoire de travail, créez un fichier nommé chat_app_auth.py.
  2. Ajoutez le code suivant dans chat_app_auth.py:

    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.
    CREDENTIALS = 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=CREDENTIALS)
    
    # 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. Dans le code, remplacez SPACE_NAME par un espace. que vous pouvez obtenir à partir de la méthode spaces.list dans l'API Chat ou à partir de l'URL d'un espace. Vérifiez que la le fichier de clé privée de votre compte de service est nommé credentials.json.

Node.js

  1. Dans le répertoire de votre projet, créez un fichier nommé chat_app_auth.js.
  2. Ajoutez le code suivant dans chat_app_auth.js:

    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. Dans le code, remplacez SPACE_NAME par un espace. que vous pouvez obtenir à partir de la méthode spaces.list dans l'API Chat ou à partir de l'URL d'un espace. Vérifiez que la le fichier de clé privée de votre compte de service est nommé credentials.json.

Apps Script ;

  1. Dans l'éditeur Apps Script, modifiez le fichier appsscript.json. et ajouter le champ d'application OAuth nécessaire pour effectuer des requêtes externes afin d'obtenir jeton OAuth du compte de service:

      "oauthScopes": [
        "https://www.googleapis.com/auth/script.external_request"
      ]
    
  2. Enregistrez le code suivant dans un fichier nommé ChatAppAuth.gs dans votre projet 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 via 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. Dans le code, remplacez CREDENTIALS par le contenu du fichier credentials.json.

  4. Dans le code, remplacez SPACE_NAME par un espace. que vous pouvez obtenir à partir de la méthode spaces.list dans l'API Chat ou à partir de l'URL d'un espace.

Étape 4: Exécutez l'exemple complet

Dans votre répertoire de travail, créez et exécutez l'exemple:

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 ;

Ouvrez le fichier ChatAppAuth.gs dans l'éditeur Apps Script. cliquez sur Exécuter.

Votre script envoie une requête authentifiée au L'API Chat, qui répond en publiant un message dans un espace Chat en tant qu'application Chat.

Résoudre les problèmes liés à l'exemple

Cette section décrit les problèmes courants que vous pouvez rencontrer lorsque vous tentez pour exécuter cet exemple.

Vous n'êtes pas autorisé à utiliser cette application

Lors de l'exécution du script, vous pouvez recevoir l'erreur suivante:

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

Ce message d'erreur signifie que l'application Chat ne dispose pas autorisation de créer des messages Chat dans les Espace Chat.

Pour résoudre l'erreur, ajoutez l'application Chat à l'espace Chat. spécifié dans le script.

Découvrez les autres fonctionnalités de l'API Chat en consultant l'API Chat documentation de référence.