我有一个 Java 后端(spring + google-oauth-client),它应该能够访问 Google.sheets 并从那里解析一些数据。
首先,我在我的本地后端部署上实现了常规的“3-legged”OAuth 2.0 身份验证,它运行良好,但由于后端将部署在云中而没有任何浏览器等,这不是最佳选择。
所以我决定使用服务账户 OAuth 流程:创建 google 服务账户并重构我的代码以使用它而不是 AuthCodeFlow,但我看到 403 Forbidden “调用者没有权限”。
据我了解,服务帐户对于 Google 来说不是“我”,因此我必须授予它访问“我的”帐户上的该工作表的权限,但由于我公司的政策禁止与他人共享文档,因此我不能这样做我们的域,并且由于服务帐户具有 @myprject.iam.gserviceaccount.com 域,我无法访问它。
也许有办法解决这个问题,因为此服务帐户是从我的帐户创建的,该帐户具有对该工作表的所有者访问权限?
如果不是,在这种情况下(没有用户参与),服务器到服务器 OAuth 的最佳方法是什么?
附言我可以尝试与我的帮助台沟通,并询问他们是否可以将此 gserviceaccount.com 添加到白名单等,但这将花费很多时间,而且结果也无法保证..
谢谢!
最佳答案
服务帐户访问工作表的唯一方法是与服务帐户电子邮件地址共享工作表。您无法更改由 Google 设置的服务帐户电子邮件地址。
您可以将工作表设置为公开,然后就可以阅读它,但我感觉您的公司也不会喜欢这个想法。
我建议您返回到您的 oauth2 选项并在您的机器上对其进行身份验证并将刷新 token 复制到云服务器,然后它应该能够使用它。
关于oauth-2.0 - Google 服务帐户和工作表权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49837650/