Google Data Studio社区连接器-如何在多个查看者之间共享凭据给第三方端点?

时间:2018-11-08 09:19:38

标签: google-apps-script google-data-studio

我正在为Google Data Studio开发自定义社区连接器,其潜在目标是为其他用户发布它。

基本上,它连接到外部REST端点,根据用户在数据源GUI中配置的内容请求数据,接收数据并进行转换,以便Google Data Studio可以对其进行处理。
连接器正在使用AuthType <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> 。因此,当Google用户通过该连接器创建数据源时,系统会要求他提供用于在该外部REST端点进行身份验证的用户/密码组合。看起来像这样:

Authenticate using <code>USER_PASS</code>

但是,请考虑以下情形:

Google用户 A 从连接器外部创建数据源。

  1. 他正在配置该数据源以使用用户名 user 和密码 password 对外部服务进行身份验证。
  2. 他使用该数据源创建报告。
  3. 然后是另一个报告。
  4. 然后可能是另一个。
  5. 他与其他人共享其中一份报告

现在,Google用户 B 收到一封电子邮件,告诉他有一个可以查看的报告。他单击链接。立即调用USER_PASS。但这可能不是,我不太了解缓存的工作原理。也许他被允许编辑报告。他也是。在 B 对报告进行重大更改后,无论如何都将调用getData()。但是数据源不知道应该使用哪个凭据对外部REST端点进行身份验证。

我玩着各种CacheServicePropertiesService来存储这些信息。我了解到,“缓存”和“属性”基本上是相同的,只是“缓存”在过期之前具有有限的寿命。

  • DocumentProperties / DocumentCache始终为null,因为据我了解,它不打算从连接器中使用。
  • ScriptProperties / ScriptCache在连接器的所有实例之间共享,就像使用该连接器的所有数据源一样。由于用户可能希望将该连接器用于该外部服务的REST API的多个帐户,因此该限制非常严格。
  • UserProperties / UserCache太受限制,因为Google用户 A 和Google用户 B 有所不同。

所以问题是: 我应该在哪里存储 user password 来认证与外部REST服务的连接器实例?

1 个答案:

答案 0 :(得分:1)

我受到Session.getEffectiveUser()的启发,具体取决于脚本运行权限的用户。

在对与我共享的第二个Google帐户进行测试之后,我得出的结论是UserProperties / UserCache的行为有所不同,具体取决于报告创建者选择了谁应使用凭据访问。有关此here的指南。

基本上,如果您选择“所有者的凭据访问权限”(这是默认设置),则创建者的UserProperties / UserCache将与其他所有查看者共享。而如果您选择“查看者的凭据访问权限”,则使用当前查看者的UserProperties / UserCache。

这意味着,如果您将凭据存储在创建者的UserProperties中(我认为是is the recommended way,则它们将与每个查看者共享,因为查看者正在使用创建者的UserProperty,而不是他们自己的。