如何获取网络应用用户的身份,但使用开发人员的权限?

时间:2015-10-16 19:10:39

标签: google-apps-script google-sheets

我尝试制作一个网络应用程序,该网络应用程序提供存储在开发人员Google帐户的电子表格文件中的数据库中的数据。但它提供的数据存储在网络应用程序开发人员的Google帐户中。

基本上,数据来自的文件,我们不希望用户访问所有数据,只是其中的一部分。但是为了提供这些数据,我们需要知道用户是谁。

如果我将脚本作为开发人员运行,我可以访问该文件,但我无法告诉用户是谁。如果我以用户身份运行脚本,则无法访问该文件。

有没有办法解决这个问题?

1 个答案:

答案 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服务器的黑客攻击,用于您自己(相当大)的风险。