允许对未经身份验证的客户端的Google Drive文件进行读写访问

时间:2014-06-16 16:12:46

标签: google-oauth google-drive-api

我们一直在开发一个Web服务(http://www.genomespace.org/),它允许实现我们的REST API的计算生物学工具,以及其他东西,读取和写入存储在“云”上的文件。

我们的默认文件存储空间为common Amazon S3 bucket,但我们现在允许用户在S3 bucket上安装自己的私有Dropbox以及文件。

我们现在正尝试为Google Drive启用类似的功能,并遇到Google DriveS3未遇到的Dropbox特有的一些问题。

  1. 只允许未经Google身份验证的客户端以不显眼的方式读取文件的方法是制作文件"Public"。我们的偏好是,一旦用户通过OAuth2授权访问我们的应用程序,用户文件就可以"Private"保留Google Drive。 但是,即使用户已经授权我们的Web服务离线访问他们的"Private"文件,我们也没有找到一种方法来生成一个URL,我们的系统授权的客户端可以使用该URL来直接获取文件而不需要客户也登录Google。 我们最接近此功能的方法是将文件权限更改为"Anyone with Link",但对于大于20MB的文件,Google坚持要求返回一个中间网页,警告该文件尚未扫描病毒。除了必须弄乱文件权限之外,这还会破坏我们现有的客户端。仅当文件为"Public"并且我们使用https://googledrive.com/host/PARENT_FOLDER_ID/FILENAME格式的网址时,非Google客户才能无干扰地阅读这些文件。

  2. 对于Google-authenticated未将文件上传到Google Drive的客户,未找到任何方法。我们的API允许我们的授权客户使用我们服务器提供的URL将文件直接PUT文件存储到后备文件存储中。但是,即使文件夹标记为"Public",客户端也需要Google身份验证凭据才能保存到Google云端硬盘。我们可以通过我们的系统处理中间跳跃这两个问题(例如,我们的网络服务器首先从谷歌驱动器下载文件然后允许客户端获取它)但是这将是非常低效的,并且希望是不必要的。在stackoverflow之前已经多次讨论过这些问题(例如herehere,并且非常仔细地阅读了回复,但最近没有看到任何讨论。

  3. 谷歌人员指示他们的API用户在stackoverflow上发布支持,所以我希望内部人员能够重新审视。

1 个答案:

答案 0 :(得分:1)

一般答案是:不要通过用户的浏览器发出驱动器请求。 Insead从您的服务器做所有事情。您是具有(刷新)用户标记的用户,因此您应该在用户和驱动器之间进行所有请求,例如代理。下载相同,您下载并返回给用户。只要您使用每个驱动器的令牌,就不会有速率限制/配额问题。