针对嵌入式查看者的行级安全性

例如,假设开发者 X 为其客户提供了一款 Web 应用。 客户使用自己的凭据登录该应用,并且可以查看不同商店的销售数据。每个客户都可以访问一系列不同的商店。该开发者希望在其应用中嵌入 Looker Studio 信息中心,以便在客户登录时,仅看到他们有权访问的商店的销售数据。此过程的执行应无需客户登录其 Google 账号。

所提解决方案需要开发者创建一个社区连接器,通过嵌入网址传递一个令牌,然后基于该令牌过滤数据。

要求

  • 信息中心查看者将登录第三方应用。
  • 应用应通过嵌入网址将唯一令牌传递给 Looker Studio 信息中心。令牌可用于查找过滤器信息,也可用于对过滤器信息进行加密。
  • 社区连接器应该能够将该令牌转换为过滤器值。

限制

  • 如果您是 G Suite 客户,并且您的管理员已禁止与“知道链接的任何人”共享云端硬盘文件,您将无法与组织外部的用户共享报告。

解决方案

要实现该解决方案,请完成以下步骤。

在 Web 应用中生成用户令牌

为 Web 应用中的每个已登录用户生成唯一令牌。在后续步骤中,您将会将此令牌传递给嵌入式信息中心。

您应该使用该令牌过滤相关数据。可供选择的选项包括:

  • 创建一个 API 端点,该端点会针对特定令牌返回过滤后的数据或用户信息。
  • 加密令牌中的用户信息,以便稍后在连接器中对其进行解密。

创建新的社区连接器

查看社区连接器的工作原理并完成社区连接器 Codelab 以开始使用。使用用于创建连接器的本地开发工具,以实现更快、更简单的开发流程。

编写连接器代码

  1. getConfig() 应返回至少一个配置项。它将用于从嵌入网址的参数中捕获令牌。

    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() 将可以通过 request.configParams 对象访问令牌。使用令牌提取过滤后的数据或过滤现有的已提取数据。
    根据上面的示例,令牌应为 request.configParams.token。在 getData() 中,令牌会传递到 REST API 端点,以获取“商店 ID”列表。然后,系统会使用商店 ID 来构建 SQL 查询,以提取销售数据。

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

创建信息中心

  1. 了解对于连接器而言部署和版本的运作方式。
  2. 为连接器创建生产部署
  3. 使用生产部署链接在 Looker Studio 中创建数据源和报告。
  4. 对于 token 配置参数,允许报告查看者修改参数值
  5. 与所选用户或“知道链接的任何人”共享信息中心
  6. 为报告启用嵌入功能

将信息中心嵌入您的平台

  1. 了解报告网址参数的工作原理。
  2. 使用网址参数将动态生成的令牌值传递给嵌入式 Looker Studio 报告。
    您的嵌入网址将如下所示:
    `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

建议

  • 您应该创建一个短期令牌。
  • 确保信息中心不会泄露任何使用无效令牌查看的信息。