我正在为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端点进行身份验证的用户/密码组合。看起来像这样:
但是,请考虑以下情形:
Google用户 A 从连接器外部创建数据源。
现在,Google用户 B 收到一封电子邮件,告诉他有一个可以查看的报告。他单击链接。立即调用USER_PASS
。但这可能不是,我不太了解缓存的工作原理。也许他被允许编辑报告。他也是。在 B 对报告进行重大更改后,无论如何都将调用getData()
。但是数据源不知道应该使用哪个凭据对外部REST端点进行身份验证。
我玩着各种CacheService和PropertiesService来存储这些信息。我了解到,“缓存”和“属性”基本上是相同的,只是“缓存”在过期之前具有有限的寿命。
所以问题是: 我应该在哪里存储 user 和 password 来认证与外部REST服务的连接器实例?
答案 0 :(得分:1)
我受到Session.getEffectiveUser()的启发,具体取决于脚本运行权限的用户。
在对与我共享的第二个Google帐户进行测试之后,我得出的结论是UserProperties / UserCache的行为有所不同,具体取决于报告创建者选择了谁应使用凭据访问。有关此here的指南。
基本上,如果您选择“所有者的凭据访问权限”(这是默认设置),则创建者的UserProperties / UserCache将与其他所有查看者共享。而如果您选择“查看者的凭据访问权限”,则使用当前查看者的UserProperties / UserCache。
这意味着,如果您将凭据存储在创建者的UserProperties中(我认为是is the recommended way,则它们将与每个查看者共享,因为查看者正在使用创建者的UserProperty,而不是他们自己的。