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

例如,假设开发者 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 用于获取商店 ID 列表的 API 端点。这些商店 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

建议

  • 您应该创建一个短期令牌。
  • 确保信息中心不会向使用 无效。