首页 > 解决方案 > Google Data Studio 社区连接器 - 如何跨多个查看者将凭据共享给第 3 方端点?

问题描述

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

基本上,它连接到外部 REST 端点,根据用户在数据源 GUI 中配置的内容请求数据,接收数据并对其进行转换,以便 Google Data Studio 可以处理它。
连接器正在使用 AuthType USER_PASS。因此,当 Google 用户从该连接器创建数据源时,将要求他提供用户/密码组合以用于在该外部 REST 端点进行身份验证。它看起来有点像这样:

使用 <code>USER_PASS</code> 进行身份验证

但是,请考虑这种情况:

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

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

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

我使用了各种CacheServicePropertiesService来存储该信息。我了解到 Cache 和 Properties 基本上是相同的,只是 Cache 在过期之前有一个有限的生命周期。

所以问题是: 我应该在哪里存储用户密码来验证连接器实例到外部 REST 服务?

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

解决方案


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

在对与我共享报告的第二个 Google 帐户进行了一些测试后,我得出的结论是,UserProperties / UserCache的行为不同,具体取决于报告创建者选择的应该使用其凭据访问权限的选项。这里有一个关于这个的指南。

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

这意味着,如果您将凭据存储在创建者的 UserProperties 中,我认为这是推荐的方式,然后它们会与每个查看者共享,因为查看者使用的是创建者的 UserProperties 而不是他们自己的。


推荐阅读