Java 如何从没有浏览器的服务器访问Google Drive文档

Java 如何从没有浏览器的服务器访问Google Drive文档,java,oauth-2.0,google-drive-api,Java,Oauth 2.0,Google Drive Api,我已经完成了执行OOB OAuth2连接的示例,它在我的笔记本电脑上运行良好 我面临的挑战是,它会启动一个浏览器,要求我验证是否要授予我的应用程序对相关文档的访问权限。从那时起,它将我的凭证集存储在本地文件中,并继续正常工作 我的用例是,我的公司中有许多部门希望利用Google Docs电子表格进行报告。然后,我希望能够在服务器上运行一个程序(从cron作业),该程序可以收集这些数据并为所有部门构建聚合报告 我本来打算创建一个“报告用户”,该用户被授予对所有相关文档的读取权限,然后使用该身份运行

我已经完成了执行OOB OAuth2连接的示例,它在我的笔记本电脑上运行良好

我面临的挑战是,它会启动一个浏览器,要求我验证是否要授予我的应用程序对相关文档的访问权限。从那时起,它将我的凭证集存储在本地文件中,并继续正常工作

我的用例是,我的公司中有许多部门希望利用Google Docs电子表格进行报告。然后,我希望能够在服务器上运行一个程序(从cron作业),该程序可以收集这些数据并为所有部门构建聚合报告

我本来打算创建一个“报告用户”,该用户被授予对所有相关文档的读取权限,然后使用该身份运行报告过程

我尝试在我的笔记本电脑上运行它,然后将存储的凭据复制到我的服务器以供使用。但这些凭证似乎与机器绑定在一起,因此它通过浏览器强制执行新的验证流

关于如何使用GoogleDrive的auth流让我做我需要的事情,有什么建议吗


TIA

我建议使用一个已被授予对所有Google Apps域用户文档只读访问权限的服务帐户,而不需要授予某些用户对所有文档的只读访问权限:

使用:


作为您在控制面板中授予服务帐户访问权限的OAuth范围。这样,如果服务器受损,您将限制只读访问。

从API控制台使用p12文件创建GoogleCredential(API访问>创建另一个客户端ID>服务帐户等):


其他答案比这更好,但您始终可以获得一组凭据并将其保存在文件中以供重用。可以使用web浏览器获取凭据,但只能获取一次,然后您的服务器就可以永远使用它们(只要您请求脱机访问并获取刷新令牌)。

谢谢Ali,但不幸的是,凭据集似乎与计算机绑定。因此,如果我将它们复制到新机器上,就会强制执行令牌刷新周期。然后需要一个浏览器。。。事情就是这样不,那是不正确的。凭据与客户端id和客户端机密以及用户绑定。那里没有特定于机器的东西。当然,您需要正确设置重定向uri,以允许您的计算机和预期的服务器。奇怪。当我将文件从笔记本电脑复制到桌面时,它不会接受令牌并导致刷新:-/我以为自己快要疯了,就又跑了一遍。我在桌面/服务器上再次运行了示例程序,收到了400个错误请求。抓了抓脑袋,又跑了一次,它成功了。但这是一个切线,目前正在解决这个问题。不幸的是,我需要等待我的IT服务组启用域范围的访问。然后我将能够进一步测试它。这允许我在没有ui障碍的情况下访问它。令人惊叹的!现在,我们来看看为什么在为凭证设置AccountUser时会抛出“access\u denied”错误。但那是另一张票。:)听起来你可能忘记了实际的控制面板域委派:我已经设置了项目的团队选项卡,我自己是所有者。我没有添加任何其他队友。然后我设置setSeriveAccountUser(“我的-email@gmail.com)和setServiceAccounted(“xxx-yyy@developer.gserviceaccount.com"). 为了能够查看我在自己帐户下创建的测试文件:-/我想你是对的。我试图避开从我的公司获得全域访问的延迟,并尝试使用我自己的个人驱动器帐户构建一个虚拟项目。不要认为这实际上是在比较苹果和有安全限制的苹果。我想我只能等了。
GoogleCredential.Builder#setServiceAccountPrivateKeyFromP12File(File)