Spring boot Google OAuth 2.0服务器端访问Google驱动器

Spring boot Google OAuth 2.0服务器端访问Google驱动器,spring-boot,google-drive-api,jhipster,google-oauth,google-oauth-java-client,Spring Boot,Google Drive Api,Jhipster,Google Oauth,Google Oauth Java Client,我已经创建了一个可以访问特定google驱动器的用户。通过Spring引导应用程序(jhipster),我将此用户连接到G-Drive。 我的问题是身份验证。我使用此代码进行身份验证(如Google为web应用程序提供的示例): 应用程序第一次启动时,它会尝试查找StoredCredential文件。 如果没有,则谷歌会提供一个链接,供用户在浏览器中打开: 请在浏览器中打开以下地址: 由于我无法从EC2实例执行此操作,因此我在本地计算机上执行此操作,并从服务器将文件上载到预期位置。最后,重新启

我已经创建了一个可以访问特定google驱动器的用户。通过Spring引导应用程序(jhipster),我将此用户连接到G-Drive。 我的问题是身份验证。我使用此代码进行身份验证(如Google为web应用程序提供的示例):

应用程序第一次启动时,它会尝试查找StoredCredential文件。 如果没有,则谷歌会提供一个链接,供用户在浏览器中打开:

请在浏览器中打开以下地址:

由于我无法从EC2实例执行此操作,因此我在本地计算机上执行此操作,并从服务器将文件上载到预期位置。最后,重新启动会使web服务器工作一段时间,直到令牌过期。 之后,我必须做同样的程序

显然我在这里做错了什么。web应用程序每隔几分钟在G-Drive上连接的正确步骤是什么

更新: 我发现()。不幸的是,我已经下载了服务帐户的json,设置了env变量,但这似乎不适用于google drive rest api(v3)


谢谢

谢谢你的意见,但我终于找到了答案。 我使用示例中安装的应用程序(独立应用程序)的代码

我应该使用的是“服务帐户”。 这可以很容易地从一个普通的谷歌用户帐户创建。 您将收到一个JSON,必须在环境变量GOOGLE\u APPLICATION\u CREDENTIALS中设置此JSON文件的完整路径

更多信息可在此处找到:

一旦您拥有一个GoogleCredential对象,其余的示例代码就保持不变

编辑: 我在“Installed Application”/“Standalone Application”之前描述的解决方案的使用可以用于演示,用户可以实际按下弹出的链接,并每隔60分钟左右刷新过期的令牌

正确的解决方案确实是使用服务帐户并模拟父帐户(与您一起创建服务帐户的帐户)。 以下是一个示例:

管理员必须授予您声明的相应权限(作用域),这必须通过在管理控制台上使用客户端ID来完成

此外,您必须确保您模拟的帐户是g-drive文件夹的成员。这不是服务帐户所必需的。 创建DriveService实例时,项目名称也必须正确。
我希望这将帮助许多人,避免浪费大量时间尝试成功连接。

我们需要为此创建一个g-suite帐户吗?Hi@Razebond虽然我处理此问题已有一段时间了,但我记得所有帐户都是g-suite。
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
    .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(".")))
    .setApprovalPrompt("auto")
    .build();
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(HTTP_TRANSPORT)
        .setJsonFactory(GCredentials.JSON_FACTORY)
        .setServiceAccountId("xxxxxx@xyz.iam.gserviceaccount.com")
        .setServiceAccountUser("This is the email of the real user that you want to impersonate")
        .setServiceAccountProjectId("The project ID")
        .setServiceAccountPrivateKeyFromP12File(p12File)
        .setServiceAccountScopes(SCOPES)
        .build();