带有服务帐户的Google云端硬盘身份验证在本地工作,但是在应用引擎上部署时会中断

皮拉斯

我正在编写一个App Engine Web应用程序,该应用程序从Google云端硬盘上的文件夹加载图片库。该代码在本地运行时效果很好(图像已正确检索并正确显示在网页上),但是在Google App Engine上部署时会中断。具体来说,启动以下方法时,返回的Drive服务为null,不会引发任何异常。凭据(SERVICE_ACCOUNT_EMAIL和PKCS12文件)应该正确,因为它们在本地运行代码时有效。我在这里想念什么?提前致谢。

public static Drive getDriveService() {
    HttpTransport httpTransport = new NetHttpTransport();
    GsonFactory jsonFactory = new GsonFactory();
    GoogleCredential credential;
    Drive service = null;
    List<String> scopes = Arrays.asList(DriveScopes.DRIVE);
    try {
        credential = new GoogleCredential.Builder()
                .setTransport(httpTransport)
                .setJsonFactory(jsonFactory)
                .setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
                .setServiceAccountScopes(scopes)
                .setServiceAccountPrivateKeyFromP12File(
                        new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH))
                .build();
        service = new Drive.Builder(httpTransport, jsonFactory, null).setApplicationName("MyAppName")
                .setHttpRequestInitializer(credential).build();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return service;
}
ruvid_one

实际上,可以使用两种方法通过Drive Api来对服务帐户进行身份验证。如果您正在使用Dev App Server在本地计算机上进行调试,则可以使用一个,但是一旦部署到GAE上将无法使用。您可以使用此代码段进行身份验证,该代码段摘自“驱动器API参考”

https://developers.google.com/drive/service-accounts#google_app_engine_project_service_accounts

只需将从控制台获得的API密钥放入代码中即可。这是我为Drive API的GAE身份验证找到的唯一可行的解​​决方案。

这是您要添加到项目中的代码:

import com.google.api.client.googleapis.extensions.appengine.auth.oauth2.AppIdentityCredential;
import com.google.api.client.googleapis.services.CommonGoogleClientRequestInitializer;
import com.google.api.client.googleapis.services.GoogleClientRequestInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson.JacksonFactory;
import com.google.api.services.drive.Drive;
import com.google.api.services.drive.DriveScopes;
...

/** The API Key of the project */
private static final String API_KEY = "the_api_key_of_the_project";

/**
 * Build and returns a Drive service object authorized with the
 * application's service accounts.
 *
 * @return Drive service object that is ready to make requests.
 */
public static Drive getDriveService() throws GeneralSecurityException,
    IOException, URISyntaxException {
  HttpTransport httpTransport = new NetHttpTransport();
  JsonFactory jsonFactory = new JacksonFactory();
  AppIdentityCredential credential =
      new AppIdentityCredential.Builder(DriveScopes.DRIVE).build();
  GoogleClientRequestInitializer keyInitializer =
      new CommonGoogleClientRequestInitializer(API_KEY);
  Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
      .setHttpRequestInitializer(credential)
      .setGoogleClientRequestInitializer(keyInitializer)
      .build();
  return service;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

带有服务帐户的Google云端硬盘身份验证在本地工作,但是在应用引擎上部署时会中断

来自分类Dev

带有代理身份验证的Google云端硬盘

来自分类Dev

带有Visual Basic .net的Google云端硬盘OAuth2身份验证

来自分类Dev

Facebook身份验证无法正常工作(在OpenShift上部署)

来自分类Dev

Facebook身份验证无法正常工作(在OpenShift上部署)

来自分类Dev

Google云端硬盘:应用拥有的帐户

来自分类Dev

Google Function HTTP触发器-服务器到带有服务帐户的服务器之间的身份验证问题

来自分类Dev

带有服务帐户的Google云端存储-禁止使用403

来自分类Dev

Google OAuth 2.0服务帐户身份验证

来自分类Dev

Java Google Contacts API访问服务帐户身份验证

来自分类Dev

使用服务帐户进行Google Admin SDK身份验证

来自分类Dev

在没有服务帐户的情况下通过Google Cloud SDK进行身份验证

来自分类Dev

Google云端硬盘API获取经过身份验证的电子邮件

来自分类Dev

使用Java和Oauth2对Google云端硬盘进行身份验证

来自分类Dev

Google云端硬盘api,如何知道是否已通过身份验证?

来自分类Dev

Google云端硬盘-无法下载经过身份验证(OAuth2)请求的缩略图

来自分类Dev

Google云端硬盘API获取经过身份验证的电子邮件

来自分类Dev

可以在AWS上部署无服务器功能,调用本地语言,但是在AWS上找不到

来自分类Dev

带有 Azure AD 身份验证的 MVC webapp 在本地运行良好,但在移植到 Azure 应用服务时不行

来自分类Dev

如果我的Android设备没有Google Play服务,如何添加Google云端硬盘帐户

来自分类Dev

确定具有服务帐户的Google云端硬盘文档的所有者

来自分类Dev

我的验证有时会中断

来自分类Dev

在Netlify上部署Vue.js Okta身份验证应用程序

来自分类Dev

Mongo .save()在本地工作,但是在Heroku遥控器上有验证错误

来自分类Dev

Google云端硬盘API-从服务帐户转移所有权

来自分类Dev

通过服务帐户访问Google云端硬盘:错误:需要登录

来自分类Dev

Google+帐户身份验证错误

来自分类Dev

用户没有带有自定义身份验证后端的属性后端,但是我称为身份验证

来自分类Dev

Google云端硬盘SDK示例python DrEdit不起作用(身份验证时闪烁,未显示编辑器)

Related 相关文章

  1. 1

    带有服务帐户的Google云端硬盘身份验证在本地工作,但是在应用引擎上部署时会中断

  2. 2

    带有代理身份验证的Google云端硬盘

  3. 3

    带有Visual Basic .net的Google云端硬盘OAuth2身份验证

  4. 4

    Facebook身份验证无法正常工作(在OpenShift上部署)

  5. 5

    Facebook身份验证无法正常工作(在OpenShift上部署)

  6. 6

    Google云端硬盘:应用拥有的帐户

  7. 7

    Google Function HTTP触发器-服务器到带有服务帐户的服务器之间的身份验证问题

  8. 8

    带有服务帐户的Google云端存储-禁止使用403

  9. 9

    Google OAuth 2.0服务帐户身份验证

  10. 10

    Java Google Contacts API访问服务帐户身份验证

  11. 11

    使用服务帐户进行Google Admin SDK身份验证

  12. 12

    在没有服务帐户的情况下通过Google Cloud SDK进行身份验证

  13. 13

    Google云端硬盘API获取经过身份验证的电子邮件

  14. 14

    使用Java和Oauth2对Google云端硬盘进行身份验证

  15. 15

    Google云端硬盘api,如何知道是否已通过身份验证?

  16. 16

    Google云端硬盘-无法下载经过身份验证(OAuth2)请求的缩略图

  17. 17

    Google云端硬盘API获取经过身份验证的电子邮件

  18. 18

    可以在AWS上部署无服务器功能,调用本地语言,但是在AWS上找不到

  19. 19

    带有 Azure AD 身份验证的 MVC webapp 在本地运行良好,但在移植到 Azure 应用服务时不行

  20. 20

    如果我的Android设备没有Google Play服务,如何添加Google云端硬盘帐户

  21. 21

    确定具有服务帐户的Google云端硬盘文档的所有者

  22. 22

    我的验证有时会中断

  23. 23

    在Netlify上部署Vue.js Okta身份验证应用程序

  24. 24

    Mongo .save()在本地工作,但是在Heroku遥控器上有验证错误

  25. 25

    Google云端硬盘API-从服务帐户转移所有权

  26. 26

    通过服务帐户访问Google云端硬盘:错误:需要登录

  27. 27

    Google+帐户身份验证错误

  28. 28

    用户没有带有自定义身份验证后端的属性后端,但是我称为身份验证

  29. 29

    Google云端硬盘SDK示例python DrEdit不起作用(身份验证时闪烁,未显示编辑器)

热门标签

归档