Google app engine 在google app engine上验证没有下载密钥的服务帐户

Google app engine 在google app engine上验证没有下载密钥的服务帐户,google-app-engine,google-api,google-api-java-client,google-authentication,Google App Engine,Google Api,Google Api Java Client,Google Authentication,我正在开发一款应该安装在谷歌应用程序引擎中的产品 在本文中,我使用服务帐户验证Gmail API、驱动器API、日历API等 使用下载的P12文件作为身份验证可以正常工作。但作为它的产品,我不希望客户端每次安装都下载并上传到应用程序上 有没有一种方法可以在没有私钥文件的情况下对其进行身份验证,或者在没有服务帐户的情况下使用该API 在下面的页面中,它提到了系统管理的密钥对是由Google自动管理的。这会有帮助吗?我没有找到任何这样的例子 在下面的链接中,它建议对于谷歌云平台,我应该使用谷歌托管

我正在开发一款应该安装在谷歌应用程序引擎中的产品

在本文中,我使用服务帐户验证Gmail API、驱动器API、日历API等

使用下载的P12文件作为身份验证可以正常工作。但作为它的产品,我不希望客户端每次安装都下载并上传到应用程序上

有没有一种方法可以在没有私钥文件的情况下对其进行身份验证,或者在没有服务帐户的情况下使用该API

在下面的页面中,它提到了系统管理的密钥对是由Google自动管理的。这会有帮助吗?我没有找到任何这样的例子

在下面的链接中,它建议对于谷歌云平台,我应该使用谷歌托管密钥

在没有下载文件的情况下可以使用此密钥吗


谢谢

我可以通过IAM API实现它

下面是它的Java代码

AppIdentityCredential credential = new AppIdentityCredential(
                Arrays.asList("https://www.googleapis.com/auth/cloud-platform"));
Iam iam = new Iam(httpTRANSPORT, jsonFACTORY, credential);
try {
    Iam.Projects.ServiceAccounts.Keys.Create keyCreate = iam.projects().serviceAccounts().keys()
                    .create("projects/myProject/serviceAccounts/myProject@appspot.gserviceaccount.com", new CreateServiceAccountKeyRequest());

    ServiceAccountKey key = keyCreate.execute();

} catch (IOException e) {
    System.out.println(e.getMessage());
}
任何密钥都可以用于生成GoogleCredential,如下所示

InputStream stream = new ByteArrayInputStream(key.decodePrivateKeyData());
GoogleCredential credential = GoogleCredential.fromStream(stream);

您不必使用p12文件,也可以使用json密钥文件。@DaImTo谢谢您的评论。这两个文件都可以使用,但都不能解决问题。我只是不想让用户在应用程序中创建密钥和上传文件。至少有办法使用API在服务器上直接创建密钥和下载文件。这会有帮助的。