Sécurité au niveau des lignes pour les lecteurs intégrés

Supposons, par exemple, que le développeur X dispose d'une application Web pour ses clients. Les clients se connectent à l'application à l'aide de leurs propres identifiants et peuvent consulter les données sur les ventes de différents magasins. Chaque client a accès à une liste différente de magasins. Le développeur souhaite intégrer un tableau de bord Looker Studio à son application afin que, lorsqu'un client se connecte, il ne voit que les données de vente des magasins auxquels il a accès. Les clients ne doivent pas avoir à se connecter à leur compte Google pour que ce processus fonctionne.

La solution proposée implique que le développeur crée un connecteur de communauté, transmet un jeton via l'URL d'intégration, puis filtre les données en fonction de ce jeton.

Conditions requises

  • Les lecteurs du tableau de bord se connectent à l'application tierce.
  • L'application doit transmettre un jeton unique au tableau de bord Looker Studio via une URL d'intégration. Le jeton peut être utilisé pour rechercher des informations de filtre ou chiffrer les informations de filtre.
  • Le connecteur de communauté doit pouvoir convertir le jeton en valeurs de filtre.

Limites

  • Si vous êtes client G Suite et que votre administrateur a désactivé le partage de fichiers Drive avec "Tous les utilisateurs disposant du lien", vous ne pourrez pas partager le rapport avec des utilisateurs externes à votre organisation.

Solution

Suivez toutes les étapes ci-dessous pour implémenter la solution.

Générer un jeton utilisateur dans l'application Web

Générez un jeton unique pour chaque utilisateur connecté dans votre application Web.Vous transmettrez ce jeton au tableau de bord intégré ultérieurement.

Vous devez utiliser le jeton pour filtrer les données pertinentes. Les options sont les suivantes :

  • Créez un point de terminaison d'API qui renvoie des données filtrées ou les informations utilisateur pour un jeton spécifique.
  • Chiffrer les informations utilisateur dans le jeton afin qu'elles puissent être déchiffrées ultérieurement dans le connecteur.

Créer un connecteur de communauté

Consultez la page Fonctionnement des connecteurs de communauté et suivez l'atelier de programmation sur les connecteurs de communauté pour commencer. Utilisez les outils de développement local pour créer des connecteurs afin d'accélérer et de faciliter le processus de développement.

Écrire le code du connecteur

  1. getConfig() doit renvoyer au moins un élément de configuration. Il sera utilisé pour capturer un jeton à partir des paramètres de l'URL d'intégration.

    function getConfig(request) {
      var cc = DataStudioApp.createCommunityConnector();
      var config = cc.getConfig();
    
      config
          .newTextInput()
          .setId('token')
          .setName('Enter user token');
    
      // TODO: Add additional config values if applicable for your connector
    
      config.setDateRangeRequired(false);
      config.setIsSteppedConfig(false);
    
      return config.build();
    }
    
  2. getData() aura accès au jeton via l'objet request.configParams. Utilisez le jeton pour récupérer les données filtrées ou filtrer les données extraites existantes.
    Pour reprendre l'exemple ci-dessus, le jeton serait request.configParams.token. Dans getData(), le jeton est transmis à un point de terminaison de l'API REST pour obtenir la liste des identifiants de magasin. Ces Store Ids (ID de magasin) sont ensuite utilisés pour construire la requête SQL visant à extraire les données de vente.

    var STORE_ID_API = 'https://www.example.com/api/storeid';
    var QUERY_STRING_PREFIX = "SELECT StoreName, Sales from stores"
    
    function getData(request) {
      var token = request.configParams.token;
    
      var storeIds = getStoreIdList(token);
      var queryString = constructQueryString(storeIds);
      var fetchedData = fetchData(queryString);
    
      // rest of getData() implementation
    }
    
    function getStoreIdList(token) {
      var url = STORE_ID_API;
      var response = UrlFetchApp.fetch(url);
      var parsedResponse = JSON.parse(response);
      return parsedResponse.storeIds;
    }
    
    function constructQueryString(storeIds) {
      var storeIdString = storeIds.join(',');
      var queryString = QUERY_STRING_PREFIX
                        + ' WHERE storeId in ('
                        + storeIdString
                        + ')';
      return queryString;
    }
    

Créer le tableau de bord

  1. Découvrez le fonctionnement des déploiements et des versions pour les connecteurs.
  2. Créez un déploiement de production pour le connecteur.
  3. Utilisez le lien de déploiement en production pour créer une source de données et un rapport dans Looker Studio.
  4. Pour le paramètre de configuration token, Autoriser les lecteurs de rapports à modifier les valeurs de paramètre
  5. Partagez le tableau de bord avec les utilisateurs sélectionnés ou avec "Tous les utilisateurs disposant du lien".
  6. Activez l'intégration pour le rapport.

Intégrer le tableau de bord à votre plate-forme

  1. Comprendre le fonctionnement des paramètres d'URL du rapport
  2. Transmettez la valeur du jeton générée dynamiquement à l'aide de paramètres d'URL au rapport Looker Studio intégré.
    Votre URL d'intégration se présentera comme suit:
    `https://lookerstudio.google.com/embed/reporting/REPORT_ID/page/PAGE_ID?config=%7B%22ds0%22%3A%7B%22token%22%3A%22TOKEN_VALUE%22%7D%7D

Recommandations

  • Vous devez créer un jeton de courte durée.
  • Assurez-vous que le tableau de bord ne divulgue aucune information affichée avec un jeton non valide.