Sicherheit auf Zeilenebene für eingebettete Viewer

Nehmen wir zum Beispiel an, Entwickler X hat eine Webanwendung für seine Clients. Kunden melden sich mit ihren eigenen Anmeldedaten in der Anwendung an und können Verkaufsdaten für verschiedene Geschäfte einsehen. Jeder Kunde hat Zugriff auf eine andere Liste von Geschäften. Der Entwickler möchte ein Looker Studio-Dashboard in seine Anwendung einbetten, damit er bei der Anmeldung eines Clients nur die Verkaufsdaten für die Geschäfte sieht, auf die er Zugriff hat. Clients sollten sich nicht in ihrem Google-Konto anmelden müssen, damit dieser Vorgang funktioniert.

Bei der vorgeschlagenen Lösung muss der Entwickler einen Community-Connector erstellen, ein Token über die eingebettete URL übergeben und dann Daten basierend auf dem Token filtern.

Voraussetzungen

  • Dashboard-Betrachter melden sich in der Drittanbieteranwendung an.
  • Die Anwendung sollte über die Einbettungs-URL ein eindeutiges Token an das Looker Studio-Dashboard übergeben. Mit dem Token können entweder Filterinformationen gesucht oder die Filterinformationen verschlüsselt werden.
  • Der Community-Connector sollte das Token in die Filterwerte umwandeln können.

Beschränkungen

  • Wenn Sie G Suite-Kunde sind und Ihr Administrator die Freigabe von Drive-Dateien für „Jeder mit einem Link“ deaktiviert hat, können Sie den Bericht nicht für Nutzer außerhalb Ihrer Organisation freigeben.

Lösung

Führen Sie die folgenden Schritte aus, um die Lösung zu implementieren.

Nutzertoken in der Webanwendung generieren

Generieren Sie für jeden angemeldeten Nutzer in Ihrer Webanwendung ein eindeutiges Token.Dieses Token werden Sie in einem späteren Schritt an das eingebettete Dashboard übergeben.

Verwenden Sie das Token, um relevante Daten zu filtern. Zu den Optionen gehören:

  • Erstellen Sie einen API-Endpunkt, der gefilterte Daten oder die Nutzerinformationen für ein bestimmtes Token zurückgibt.
  • Verschlüsseln Sie die Nutzerinformationen im Token, damit sie später im Connector entschlüsselt werden können.

Neuen Community-Connector erstellen

Lesen Sie zuerst den Artikel Funktionsweise von Community-Connectors und absolvieren Sie das Codelab zu Community-Connectors, um loszulegen. Verwenden Sie die lokalen Entwicklungstools zum Erstellen von Connectors, um den Entwicklungsprozess zu beschleunigen und zu vereinfachen.

Connector-Code schreiben

  1. getConfig() sollte mindestens ein Konfigurationselement zurückgeben. Damit wird ein Token von den Parametern eingebetteter URLs erfasst.

    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() hat über das request.configParams-Objekt Zugriff auf das Token. Verwenden Sie das Token zum Abrufen gefilterter Daten oder zum Filtern vorhandener abgerufener Daten.
    Gemäß dem obigen Beispiel lautet das Token request.configParams.token. In getData() wird das Token an einen REST API-Endpunkt übergeben, um eine Liste der Store-IDs abzurufen. Diese Store Ids werden dann verwendet, um die SQL-Abfrage zum Abrufen von Verkaufsdaten zu erstellen.

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

Dashboard erstellen

  1. Funktionsweise von Bereitstellungen und Versionen für Connectors
  2. Erstellen Sie eine Produktionsbereitstellung für den Connector.
  3. Verwenden Sie den Link zur Produktionsbereitstellung, um eine Datenquelle und einen Bericht in Looker Studio zu erstellen.
  4. Wählen Sie für den Konfigurationsparameter token die Option Betrachtern von Berichten erlauben, Parameterwerte zu ändern aus.
  5. Geben Sie das Dashboard für ausgewählte Nutzer oder für „Jeder, der über den Link verfügt“ frei.
  6. Aktivieren Sie das Einbetten für den Bericht.

Dashboard in Ihre Plattform einbetten

  1. Funktionsweise von Berichts-URL-Parametern
  2. Übergeben Sie den dynamisch generierten Tokenwert mithilfe von URL-Parametern an den eingebetteten Looker Studio-Bericht.
    Die Einbettungs-URL sieht in etwa so aus:
    `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

Empfehlungen

  • Sie sollten ein kurzlebiges Token erstellen.
  • Achten Sie darauf, dass im Dashboard keine Informationen offengelegt werden, die mit einem ungültigen Token aufgerufen wurden.