google-apps-script - Google Data Studio 社区连接器 - 如何跨多个查看者将凭据共享给第 3 方端点?
问题描述
我正在为 Google Data Studio 开发一个自定义社区连接器,其潜在目标是为其他用户发布它。
基本上,它连接到外部 REST 端点,根据用户在数据源 GUI 中配置的内容请求数据,接收数据并对其进行转换,以便 Google Data Studio 可以处理它。
连接器正在使用 AuthType USER_PASS
。因此,当 Google 用户从该连接器创建数据源时,将要求他提供用户/密码组合以用于在该外部 REST 端点进行身份验证。它看起来有点像这样:
但是,请考虑这种情况:
Google 用户A从连接器中创建数据源。
- 他正在配置该数据源以使用用户名user和密码password对外部服务进行身份验证。
- 他使用该数据源创建报告。
- 然后是另一份报告。
- 然后也许是另一个。
- 他与其他人分享其中一份报告
现在,Google 用户B收到一封电子邮件,告诉他有一份可以查看的报告。他点击链接。立即,getData()
正在调用。但它可能不是,我不太了解缓存是如何工作的。也许他被允许编辑报告。所以他会。在B对该报告进行重大更改之后,getData()
无论如何都会调用它。但是数据源不知道它应该使用哪些凭据来对外部 REST 端点进行身份验证。
我使用了各种CacheService和PropertiesService来存储该信息。我了解到 Cache 和 Properties 基本上是相同的,只是 Cache 在过期之前有一个有限的生命周期。
- DocumentProperties / DocumentCache始终为空,因为据我了解,它不打算从连接器中使用。
- ScriptProperties / ScriptCache在连接器的所有实例之间共享,就像在使用该连接器的所有数据源中一样。这太受限制了,因为用户可能希望将该连接器用于该外部服务的该 REST API 的多个帐户。
- UserProperties / UserCache太有限了,因为它对于 Google User A和Google User B是不同的。
所以问题是: 我应该在哪里存储用户和密码来验证连接器实例到外部 REST 服务?
解决方案
我受到Session.getEffectiveUser()的启发,这取决于脚本在其权限下运行的用户。
在对与我共享报告的第二个 Google 帐户进行了一些测试后,我得出的结论是,UserProperties / UserCache的行为不同,具体取决于报告创建者选择的应该使用其凭据访问权限的选项。这里有一个关于这个的指南。
基本上,如果您选择“所有者的凭据访问”,这是默认设置,则创建者的 UserProperties/UserCache 将与其他所有查看者共享。而如果您选择“查看者的凭据访问”,则使用当前查看者的 UserProperties/UserCache。
这意味着,如果您将凭据存储在创建者的 UserProperties 中,我认为这是推荐的方式,然后它们会与每个查看者共享,因为查看者使用的是创建者的 UserProperties 而不是他们自己的。
推荐阅读
- python-3.x - Python删除txt文件中的空白
- reactjs - 如何使用 Emotion v11 + Typescript 将 Themes Emotion.d.ts 类型传递给单元测试
- c - 使用malloc函数时单链表程序错误(更新一)
- r - 向字符串/字符向量中的每个元素添加可变长度填充
- spring - Spring-integration ExpressionEvaluatingRequestHandlerAdvice 无法评估 failureExpression
- c# - 如何在xamarin中删除集合视图中的一个单元格和sqlite中的行的删除按钮?
- spring-boot - :EL1008E:在“java.util.ArrayList”类型的对象上找不到属性或字段“LEVEL”-可能不是公共的或无效的?
- azure - 一个可以侦听所有容器的 Cosmos DB 更改源的 Azure 函数
- docker - 连接期间的 Docker 错误:发布 http://docker:2375/v1.40/build?
- vue.js - 在同一个父组件中使用相同的 .vue 组件两次 - 如何区分