我尝试制作一个网络应用程序,该网络应用程序提供存储在开发人员Google帐户的电子表格文件中的数据库中的数据。但它提供的数据存储在网络应用程序开发人员的Google帐户中。
基本上,数据来自的文件,我们不希望用户访问所有数据,只是其中的一部分。但是为了提供这些数据,我们需要知道用户是谁。
如果我将脚本作为开发人员运行,我可以访问该文件,但我无法告诉用户是谁。如果我以用户身份运行脚本,则无法访问该文件。
有没有办法解决这个问题?
答案 0 :(得分:2)
在适当的条件下,您可以使用另一个充当Proxy的脚本来提供此分隔。然后,您的Web应用程序将访问代理以检索数据。
代理脚本将在数据所有者(或开发人员)的授权下运行,并具有对电子表格的完全访问权限。它提供了一个不需要电子表格访问权限的消费者可以使用的Web服务。
“正确的条件”与您的数据的安全性和隐私性有关。
如果您位于Google Apps域(例如教育,商家)中,那么您的代理脚本可以访问用户的身份以验证其访问权限。此类脚本的一个示例是AwesomeTable Proxy,它是针对该服务定制的,但可以适用于一般电子表格访问控制。 Google会为您处理所有身份验证,并且由于您的脚本在Google域中运行,因此您可以获取用户的ID。这非常适合在域内提供数据;它不向匿名用户提供数据。 (在此上下文中,匿名表示“未经过身份验证的域成员”。)
如果您只是希望保护对所有者(或开发人员)帐户的电子表格的访问权限,但是可以公开获取数据,则您的代理可以忽略所有身份验证和鉴别问题。
写入到电子表格的代理脚本示例显示在How to post to Google Docs Form directly中。
值得注意:“最佳做法是确保JSONP脚本是只读的,只返回非敏感信息。” ref
最后,如果您的用户不在域中,但您仍希望能够识别它们,则需要在代理中实现自己的身份验证服务,可能使用会话令牌方案,因此仅限客户端需要验证一次。这将要求您维护自己的用户凭据数据库,并管理随之而来的所有问题。
一旦用户获得了令牌,他们就会使用该令牌通过您的代理请求数据。只要令牌仍然有效(另一个问题),代理就知道谁正在发出请求,并且可以适当地实现它。
在Google Apps脚本施加的限制范围内,这些是我认为您拥有的选项。有办法解决这些限制,但它们有自己的限制和警告; Serving JSON from Google Apps Script as "user accessing the web-app"描述了涉及Chrome扩展程序和Node.js服务器的黑客攻击,用于您自己(相当大)的风险。