我正在开发一个项目,需要使用Java通过REST访问一组Google日历。
该程序位于私人非Google服务器上,并定期(通过cron job)连接到Google帐户,获取链接到帐户的所有日历列表,获取每个日历上一个月的事件,并返回包含所有信息的XML文件。该程序应能够在没有任何用户输入的情况下执行和访问日历。目前,该项目规定仅读取日历,不进行修改(因此仅进行GET / LIST调用)。
我已查看了Google文档并研究了使用客户端库的示例代码,几乎所有给定的示例都要求在访问日历API之前进行OAuth 2.0用户同意。即使是REST API文档页面也要求您激活OAuth 2.0才能返回请求的信息(否则返回HTTP 40X错误代码和包含错误状态和消息的JSON文件)。
我该如何通过REST调用连接到Google Calendar REST API以获取所需的信息,而不需要在执行时要求用户同意?
还是我把事情复杂化了,只需要“Server Key”,可以在Google Cloud控制台的注册应用程序中找到?
或者我需要同时使用OAuth和开发人员密钥? (我在这里找到了有人在标题为“Google Calendar API v3 hardcoded credentials”的问题下提到过;但是,问题和解决方案是针对PHP的,我不知道在Java中是否需要或可能有类似的解决方案)。
- 我确实看到了使用服务帐户创建JWT的可能性(使用Google Cloud控制台,在“注册应用程序”中注册为Web应用程序,它位于“证书”下),但我没有找到如何将其与Java程序的REST调用结合使用。 以下链接(http://aleksz-programming.blogspot.be/2012/11/google-calendar-api.html)提到可以通过“Web服务器应用程序”或“已安装的应用程序”访问信息,但未详细说明。然而,在谷歌OAuth 2.0文档页面上,“Web服务器应用程序”部分仍需要用户输入和同意。哪个是真的?
我还发现了这个页面(https://developers.google.com/accounts/docs/OAuth2Login),但没有看到如何在不使用用户同意页面的情况下使用它。
我看到一些关于“两条腿的OAuth”的参考资料。但似乎这不是OAuth 2.0,而是一种版本 1 的做法。这对我的项目是可能的解决方案吗?如果是,我需要从Google Cloud控制台获取哪些信息才能使其运作?